Requirejs 为库中的资产使用了错误的路径
Requirejs uses wrong path for asset in library
在我正在创建的网站中 RequireJS is used as module loader. There is a "3d photo viewer" on this website and I'm using the Photo Sphere Viewer lib for these. One of the dependencies for this library is 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'
}
});
photo-sphere-viewer
在用户请求获取 3d 照片后网站要求。代码有点像这样:
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
时,再往前一行似乎有 'changed its mind'。我已经为此工作了一段时间但没有结果,我正在考虑将 D.js
放在网站根目录中,但这当然不是我的首选解决方案。
我怀疑你的问题是因为 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
我认为 .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(["three","D_js","uevent","doT"],b) ...
在我正在创建的网站中 RequireJS is used as module loader. There is a "3d photo viewer" on this website and I'm using the Photo Sphere Viewer lib for these. One of the dependencies for this library is 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'
}
});
photo-sphere-viewer
在用户请求获取 3d 照片后网站要求。代码有点像这样:
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
时,再往前一行似乎有 'changed its mind'。我已经为此工作了一段时间但没有结果,我正在考虑将 D.js
放在网站根目录中,但这当然不是我的首选解决方案。
我怀疑你的问题是因为 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
我认为 .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(["three","D_js","uevent","doT"],b) ...