Я создал Компонент-preload.js от [email protected]
с параметром compatVersion: "1.44"
, так как мое ядро SAPUI5 составляет 1,44.
Сценарий:
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 %>"
}
}
В результате у меня есть файл, содержащий все, что я упомянул в скрипте, я сохраняю его в папке Веб-контент и обновляю пути в соответствии с иерархией, как это описано в книге SAPUI5.
Когда я его тестирую, я получаю странное поведение - браузер загружает и Компонент-preload.js, и все файлы, которые в нем упомянуты. Другими словами, после генерации прелоадера браузер загружает его, но игнорирует его содержимое и по-прежнему запрашивает отдельные файлы, хотя они уже находятся в этом прелоадере,
Я хочу, чтобы файлы, упомянутые в предварительном загрузчике, не запрашивались браузером как отдельные файлы. В противном случае нет причин использовать прелоадер. Как я могу это исправить?
P.S. Проблема аналогична Минифицированные * .properties и * .css по-прежнему запрашиваются.
@Jorg, у меня вообще нет записи prefix
. Структура моего Component-preload.js
: jQuery.sap.registerPreloadedModules({ "version": "2.0", "name": "Component-preload", "modules": {...} });
Префикс записей в объекте modules
должен включать пространство имен, например "my/app/namespace/Component.js": "..."
@Jorg, следовательно, необходимо использовать пространство имен в пути, каково правильное расположение файла? Он должен находиться в папке root
или в WebContent
?
Пространство имен - это не фактический путь к файлу, это то, что вы определили в своем манифесте как корень вашего приложения, который затем распространяется на все остальные файлы. Сама предварительная загрузка находится там, где живет ваш Component.js.
Предварительная загрузка выглядит так:
Чтобы немного уточнить; UI5 загружает и кэширует файлы внутренне на основе пространства имен и имени файла, что соответствует идентификатору на снимке экрана:
com.bus.inbox.mist.businessrolechange.Component.js
для компонента или com.bus.inbox.mist.businessrolechange.controllers.View1.controller.js
для контроллера View1. Если предварительная загрузка не соответствует этим идентификаторам, механизм кэширования не может их найти, и фактические файлы загружаются независимо от наличия файла предварительной загрузки.
В приведенном ниже примере (из WebIDE) папка dist
развернута, а папка webapp
хранится в репозитории git.
В некоторых случаях корень определяется немного иначе, например, resourceRoots в начальной загрузке файла index.html
. Это в основном для автономных приложений.
<!-- 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>
Спасибо за подробное объяснение. На самом деле я не могу найти manifest.json
в своем проекте, я использую NWDS / NWDI, а не WebIDE. Попробую создать манифест вручную.
Вместо этого ваш манифест может быть включен как структура json в ваш компонент
имя пространства имен содержится в ключе объектов предварительной загрузки? вероятно, это префиксная запись.