我的程序通过树枝模板中的此入口点开始:
<script data-main="{{ asset('bundles/wwwcms/js/app') }}" src="{{ asset('bundles/wwwcms/js/require.js') }}"></script>
输出:
<script data-main="static.correct_require_url.net/js/app" src="static.correct_require_url/require.js"></script>
一切正常,所以要求执行我的app.js(config):
requirejs.config({
'baseUrl': 'js/lib',
'paths': {
'app': '../app',
'jquery': '//code.jquery.com/jquery-1.10.2.min',
'bootstrap': '//netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min'
},
'shim': {
'bootstrap': {
deps: ['jquery']
}
}
});
// always require jquery and bootstrap onload
requirejs(['bootstrap']);
哪个也有效。
目录结构如下:
app.js
require.js
/ lib目录
- test.js
/应用
- dirty.js
- import.js
好的,这就是错误发生的地方
对于页面,让我们说我想加载dirty.js和import.js。 dirty.js依赖于jquery,而import.js依赖于&#34; test.js&#34; (我刚刚为演示目的而制作的东西)。
所以我以这种方式在页面上加载依赖项:
<script type="text/javascript">
require(['app/dirty', 'app/import']);
</script>
当页面加载时,dirty.js和import.js从相对于&#34; app&#34;的正确URL加载得很好。但是,import.js(test.js)的依赖项无法正确加载。
这是import.js的开始方式:
require(['jquery', 'test'], function($, test) {
...
});
如您所见,它要求lib / test.js。它从CDN中提取jQuery,以便进行处理。但是对于test.js,它使用了错误的路径。
使用正确的静态url路径引入import.js(以及首先加载的所有其他模块),但使用错误的路径加载模块的依赖项 - 使用该页面的url加载它们!
因此,当我查看调试器控制台中的网络选项卡时,import.js来自:
static.blahblah.com/js/app/import.js。
但test.js来自:
blahblah.com/route/to/current/page/js/app/test.js
(每次显然是404s)
出现这种情况的可能原因是什么?难道我做错了什么?任何帮助将不胜感激。
这是在需要运行之前脚本标记的外观:
<script data-main="//static.bananajams.cloud.net/bundles/wwwcms/js/app" src="//static.bananajams.cloud.net/bundles/wwwcms/js/require.js"></script>
<script type="text/javascript">
require(['app/dirty', 'app/preview', 'app/import']);
</script>
答案 0 :(得分:0)
如果数据主要是代码的单一入口点,那么数据主要是一个好主意。它是异步加载的,因此无法保证它在应用程序中的其他代码之前运行。见
RequireJS does not run data-main script before loading required modules
了解更多信息。