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 库所需的库定义了 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'
  }
});

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。好像它完全忽略了 baseUrlpath,但其他库不会忽略它们,它们会正常加载。

我已将 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) ...