由于我的SAPUI5核心为1.44,因此我使用grunt-openui5@0.14.0
通过compatVersion: "1.44"
构建了 Component-preload.js 。
脚本:
openui5_preload: {
component: {
options: {
resources: {
cwd: "<%= dir.webcontent %>",
prefix: "<%= dir.webapp %>/<%= dir.webcontent %>",
src: [
"**/*.js",
"**/*.html",
"**/*.json",
"**/*.fragment.html",
"**/*.fragment.xml",
"**/*.fragment.json",
"**/*.view.html",
"**/*.view.xml",
"**/*.view.json",
"**/*.properties",
"manifest.json",
"!test/**"
]
},
compatVersion: "1.44",
dest: "<%= dir.dist %>"
},
components: "<%= dir.webapp %>/<%= dir.webcontent %>"
}
}
结果,我有了一个文件,其中包含我在脚本中提到的所有内容,将其存储在 WebContent 文件夹中,并根据层次结构更新路径,就像在SAPUI5书。
测试时,我得到一个奇怪的行为-浏览器同时加载 Component-preload.js 和其中提到的所有文件。换句话说,在生成预加载器之后,浏览器会下载该文件,但会忽略其内容,并仍然请求单独的文件,尽管它们已位于此预加载器中,
我希望在预加载器中提到的文件不会被浏览器请求为单独的文件。否则,没有理由使用预加载器。我该如何解决?
P.S。问题类似于Minified *.properties and *.css are still requested。
答案 0 :(得分:2)
命名空间不是实际的文件路径,它是您在清单中定义为应用程序根目录的任何文件,然后传播到其他所有文件。预加载本身位于Component.js所在的任何位置。
详细说明; UI5根据名称空间和文件名在内部加载和缓存文件,即按照屏幕快照中的ID:
com.bus.inbox.mist.businessrolechange.Component.js
用于组件,或com.bus.inbox.mist.businessrolechange.controllers.View1.controller.js
用于View1的控制器。如果预加载与这些ID不匹配,则缓存机制将找不到它们,并且无论是否存在预加载文件,都将加载实际文件。
在下面的示例中(来自WebIDE),部署了dist
文件夹,并将webapp
文件夹存储在git存储库中。
在某些情况下,根的定义略有不同,例如index.html
文件的引导程序中的resourceRoots。这主要用于独立应用程序。
<!-- Bootstrapping UI5 -->
<script id="sap-ui-bootstrap"
src="resources/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="sap_belize"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"
data-sap-ui-resourceroots='{"com.bus.inbox.mist.businessrolechange": "."}'
data-sap-ui-frameOptions="trusted">
</script>