在网站中,我创建RequireJS用作模块加载器。有一个" 3d照片查看器"在这个网站上,我使用Photo Sphere Viewer lib来表示这些。该库的一个依赖项是D.js。这在库代码中是必需的:
... define(["three","D.js","uevent","doT"],b) ...
在我的RequireJS配置中,我为Photo Sphere Viewer库所需的库定义了baseUrl
和path
:
requirejs.config({
baseUrl: '/scripts',
paths: {
'vendor': 'lib/vendor',
'three': 'lib/vendor/three',
'uevent': 'lib/vendor/uEvent',
'doT': 'lib/vendor/dOT',
'D.js': 'lib/vendor/D'
}
});
用户请求获取3d照片后,网站需要 photo-sphere-viewer
。代码有点像这样:
requirejs(['main', 'deps', 'for', 'app'], function(a, b, c, d){
var showSphere = function(){
// loading logic and such
require('vendor/photos-sphere-viewer', function(PSV){
// do your 3d photo thing
});
};
var button = document.getElementById('button');
button.addEventListener('click', showSphere);
});
D.js
位于/scripts/lib/vendor/D.js
。但是当我测试这个时,我得到/D.js
的404。好像它完全忽略了baseUrl
和path
,但是其他库没有被忽略,这些都会正常加载。
我已将console.log(require.urlTo('D.js'))
添加到Photo Sphere Viewer js文件的顶部,并以某种方式记录了正确的路径:"/scripts/lib/vendor/D.js"
。但是,当D.js
实际需要时,它还会进一步改变它的思维状态'。我已经有一段时间没有结果了,我有点考虑将D.js
放在网站根目录中,但当然这不是我首选的解决方案。
答案 0 :(得分:1)
我认为.js正在抛弃它。 更改配置
requirejs.config({
baseUrl: '/scripts',
paths: {
'vendor': 'lib/vendor',
'three': 'lib/vendor/three',
'uevent': 'lib/vendor/uEvent',
'doT': 'lib/vendor/dOT',
'D_js': 'lib/vendor/D'
}
});
以这种方式调用define。
define(["three","D_js","uevent","doT"],b) ...
答案 1 :(得分:0)
我怀疑你的问题是因为异步加载了requireJs依赖项。
由于requireJs异步加载依赖项,因此当您尝试使用它时,可能尚未加载D.js文件。
如果是问题所在,解决方案是在require.js
<script type="text/javascript" src="/js/config.js"></script>
<script type="text/javascript" src="/js/require.js"></script>
请参阅
Require JS is ignoring my config
和http://requirejs.org/docs/api.html#config