我将基于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([...],..
数组中指定前一个模块的方式是否影响后续模块的解析方式(当我修改时似乎就是这种情况)
如果您可以在答案中包含这些内容,那将非常有帮助。
答案 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
文件,第二个文件提供有关此模块的信息)。