由于我的SAPUI5核心是1.44,我用[email protected]
和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和其中提到的所有文件。换句话说,在生成预加载器浏览器之后下载它,但忽略其内容并仍然请求单独的文件,尽管它们已经位于此预加载器中,
我希望浏览器不会将预加载器中提到的文件作为单独的文件请求。否则,没有理由使用预加载器。我该如何解决?
命名空间不是实际的文件路径,它是您在清单中定义的任何应用程序的根,然后传播到每个其他文件。预载本身就存在于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>