使用CDN时加载自定义库

时间:2015-11-25 00:30:41

标签: http-status-code-404 cdn sapui5

我有一个使用自定义应用程序特定库(sap.ui.foo)的应用程序,其中包含自定义控件,视图和控制器。

我的部署策略是从为index.html文件提供服务的同一服务器/端口提供自定义库。

我还想使用SAP的CDN加载OpenUI5库(sap.m等)。

我正在使用OpenUI5's GitHub repository附带的Grunt /节点工具。

当我在本地加载我的应用程序(没有CDN)时,它运行得很好,但速度很慢(我想这么大的下载负载)所以我试图使用CDN以期提高启动性能。 / p>

我的index.html看起来像这样:(在@ codeworrior'回答之后编辑):

    <script id="sap-ui-bootstrap"
         src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
         data-sap-ui-theme="sap_bluecrystal"
         data-sap-ui-libs="sap.ui.layout, sap.m, sap.ui.foo"
         data-sap-ui-xx-bindingSyntax="complex"
         data-sap-ui-resourceroots='{
             "ns":"./",
             "sap.ui.foo": "./sap/ui/foo/"
         }'
    >

这是我的目录结构(据我所知是&#34;标准&#34;):

src
├── foo
│   └── src
│       └── main
│           └── webapp
│               ├── index.html # start point
│               ├── resources
│               ├── test-resources
│               └── WEB-INF
├── sap.m
├── sap.ui.commons
...other sap libs...
└── sap.ui.foo
    └── src
        └── sap
            └── ui
                └── foo
                    └── # my controls...

并在grunt build:production我的&#34;目标&#34;之后目录看起来像这样:

target
├── openui5-sap.m
├── openui5-sap.ui.commons
├── openui5-sap.ui.core
├── openui5-sap.ui.demokit
├── ...other sap libs...
├── openui5-sap.ui.foo
    └── resources
        └── sap
            └── ui
                └── foo
                    ├── Bootstrap.js
                    ├── controllers
                    ├── controls
                    ├── data
                    ├── font
                    ├── img
                    ├── js
                    ├── library.js
                    ├── library-preload.json
                    ├── models
                    ├── tasks
                    ├── themes
                    ├── util.js
                    ├── views
                    └── wrappers

但是,在我执行了grunt serve:target并点击了网址http://localhost:8989/foo/之后,在Chrome的开发工具中,我得到了:

failed to preload 'sap.ui.foo.library-preload': Not Found -  sap.ui.ModuleSystem
Uncaught Error: failed to load 'sap/ui/foo/library.js' from ./sap/ui/foo/library.js: 404 - Not Found

网络标签显示我正在提供CDN文件,但是我尝试在本地提供的文件(例如我的自定义lib&amp;库`js和library-preload.json)是404&#39>。

有关如何加载我的库的任何建议吗?

1 个答案:

答案 0 :(得分:1)

如果您的库以通常的方式存储(反映文件夹结构中的完整限定名称),那么在data-sap-ui-resourceroots属性中定义相应的条目就足够了:

<script id="sap-ui-bootstrap"
 src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
 data-sap-ui-theme="sap_bluecrystal"
 data-sap-ui-libs="sap.ui.layout, sap.m, my.uilib"
 data-sap-ui-xx-bindingSyntax="complex"
 data-sap-ui-resourceroots="{
   ns:'./',
   'my.uilib': './my/uilib/'
 }">
</script>

如果结构不同,只需调整配置中的路径即可。 resourceRoots是早期配置的,因此您甚至可以在data-sap-ui-libs属性中指定lib。

但也许你已经尝试过了,但它没有用。那么问题可能出在选项的拼写上。它是“资源根源”,而不是“资源根源”。