Requirejs在库中使用错误的资产路径

时间:2017-05-25 10:12:37

标签: javascript requirejs

在网站中,我创建RequireJS用作模块加载器。有一个" 3d照片查看器"在这个网站上,我使用Photo Sphere Viewer lib来表示这些。该库的一个依赖项是D.js。这在库代码中是必需的:

... define(["three","D.js","uevent","doT"],b) ...

在我的RequireJS配置中,我为Photo Sphere Viewer库所需的库定义了baseUrlpath

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。好像它完全忽略了baseUrlpath,但是其他库没有被忽略,这些都会正常加载。

我已将console.log(require.urlTo('D.js'))添加到Photo Sphere Viewer js文件的顶部,并以某种方式记录了正确的路径:"/scripts/lib/vendor/D.js"。但是,当D.js实际需要时,它还会进一步改变它的思维状态'。我已经有一段时间没有结果了,我有点考虑将D.js放在网站根目录中,但当然这不是我首选的解决方案。

2 个答案:

答案 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