本教程第40步,作者介绍了如何制作一个Release版(或称为Distribution版)),即如何使用工具自动生成component-preload.js文件:SAPUI5应用开发教程40-如何制作包含component-preload.js的SAPUI5发布版。读者现在可以使用了,马上尝试使用第九步文件夹中的源码,但是发现了一个问题:为什么我把代码部署在本地tomcat上,把dist文件夹搬进去,执行还是会加载两次Component-preload.js还会加载Component.js,报错404,使用教程九中Component的代码。Error:failedtoloadJavaScriptresource:sap/ui5/walkthrough/Component-preload.js-sap.ui.ModuleSystem本文作者就带大家分析一下这个问题。问题分析首先我们来回顾一下第40步介绍的知识:package.json中定义了一个名为build的脚本,执行命令行为ui5build--clean-dest:所以我们可以通过npmrunbuild命令行来执行这个脚本,forSAPUI5applicationsourcecodeforbuild(构建):构建成功后,在当前目录下生成一个dist文件夹:dist文件夹中包含构建后自动生成的Component-preload.js文件。大家仔细观察dist文件夹下的子文件夹,发现这些子文件夹都是来自原来webapp文件夹下的子文件夹。还有一个极其重要的一点:dist文件夹下,webapp文件夹已经不存在了!记住我们观察到的。我们将dist文件夹复制到tomcat的webapps文件夹下,启动tomcat服务器,通过urlhttp://localhost:8080/dist/访问构建好的SAPUI5应用,同时也观察到Component-preload.js文件被加载.实际上,http://localhost:8080/dist/指向的是http://localhost:8080/dist/index.html。让我们转到有问题的09文件夹。为了不影响原来的09步骤,我把09文件夹复制一份,重命名为09-build。我还在09-build文件夹下的package.json中添加了构建脚本,然后执行npmrunbuild:构建后的index.html和Component-preload.js文件出现在之后生成的dist文件夹的webapp文件夹中构建。可以想象,当我们把这个结构的dist文件夹复制到tomcat的webapps文件夹下,我们是不可能访问http://localhost:8080/dist/正常工作的,因为现在index.html是放在/下的dist/webapp而不是像步骤40那样直接在/dist/下。即使我们手动将访问tomcat的url添加到webapp中,即http://localhost:8080/dist09/webapp/(请忽略这里的dist22,我将步骤40中的dist文件夹放入tomcat的webapps文件夹中,并放入09-build,重命名为dist09,放入tomcat的webapps文件夹中),Component-preload.js无法加载成功。本文的其余部分介绍了此问题的解决方案。
