我开始使用 RequireJS
,依赖加载正常,但在回调方法中所有依赖都是 undefined
。
require.config({
baseUrl: 'js',
paths: {
angular: '../lib/angular/angular',
myApp: 'app',
states: 'app-states',
controllers: 'controllers',
filters: 'filters',
services: 'services',
oauth2: 'oauth2'
//async: 'lib/require/async'
},
shim: {
'myApp': {
deps: ['angular']
},
'states' : {
deps: ['angular', 'myApp']
},
'controllers': {
deps: ['angular', 'myApp']
},
'filters': {
deps: ['angular', 'myApp']
},
'services': {
deps: ['angular', 'myApp']
}
}
});
require(['angular', 'myApp', 'states', 'controllers', 'filters', 'services'], function(angular, myApp, states, controllers, filters, services) {
'use strict';
console.log('requireJs done');
console.log(angular);
console.log(myApp);
angular.bootstrap(document, ['myapp']);
});
如果我只需要 angular
,则不会调用回调方法。我想知道为什么。
require(['angular', function(angular) {
console.log("requireJS done");
}]);
最佳答案
您没有从这些库中导出任何值。对于垫片,您需要在引用它们之前指定要导出的变量。由于您没有导出任何内容,因此变量设置为空。
导出看起来像这样:
shim: {
"angular": {
exports: "angular"
}
}
AMD/Requirejs 的工作方式是从它加载的文件中提取一个值,并将其设置为回调函数中的命名参数。对于普通的 AMD 文件,无论传递给 define 的函数的返回值是什么,或者是 define 中的对象。但是对于垫片,您需要选择一个变量,通常是库的命名空间。这允许您为基于命名空间的库模拟 AMD
你可以看到 documentation section on shims了解更多详情。
关于javascript - 回调方法中未定义 RequireJS 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18050923/