指定`RequireJs`的相对路径

时间:2014-09-28 15:55:00

标签: javascript requirejs

我将基于RequireJs的应用程序中的baseUrl设置为/angular有时我想设置相对于基地的路径,有时我想将其设置为相对于当前目录。

我对RequireJs很新,很困惑。

这就是我现在所拥有的:

require([
    'require',
    'angular',
    'module/draft/draftDisplay'// module that I want relative to baseUrl
], function(requireLocal, angular) {

requireLocal('./autoSave'); // Modules that I want relative to current url
requireLocal('./module');

这会产生此错误:Error: Module name "autoSave" has not been loaded yet for context: _

正如我之前所说,我无法很好地处理RequireJs的工作原理。我不理解的一些事情是:

1)RequireJs何时使用baseUrl,何时使用当前目录

2)模块ID与其路径之间的区别是什么?

3)require([...],..数组中指定前一个模块的方式是否影响后续模块的解析方式(当我修改时似乎就是这种情况)

如果您可以在答案中包含这些内容,那将非常有帮助。

1 个答案:

答案 0 :(得分:1)

  

1)RequireJs何时使用baseUrl,何时使用当前目录

始终为baseUrl,除非模块名称以./../作为前缀,在这种情况下,它使用需要另一个模块的模块目录。

  

2)模块ID与其路径之间有什么区别?

路径包含baseUrl。例如。可能是scripts/vendor/angular/angular.js之类的东西。模块ID不包含baseUrl或后缀,例如对于baseUrl: 'scripts',上面的模块ID为vendor/angular/angular

  

3)require([...],..数组中指定前一个模块的方式是否影响后续模块的解析方式(当我修改时似乎就是这种情况)

没有


您的错误是由于require的同步版本未加载的模块引起的。请改用异步版本;类似的东西:

requireLocal(['./autoSave', './module'], function(autosave, module) {
    // here autosave and module are loaded
});
// BEWARE: Here neither autosave nor module are loaded

但你确定你想要内在的要求吗?根据您提供的信息,提出外部要求中的要求可能就足够了,即

require(['require','angular','module/draft/draftDisplay','./autoSave','./module'],...)

此外,名为'module'的导入在require中具有特殊含义;它包含有关当前模块的信息;如果您确实使用'./module',那么它将与'module'完全不同(第一个文件在与此文件相同的目录中查找module.js文件,第二个文件提供有关此模块的信息)。