1

我开始使用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']);
}); 

如果我只是 require angular,则不会调用回调方法。我想知道为什么。

require(['angular', function(angular) {
    console.log("requireJS done");
}]);
4

3 回答 3

2

您没有从这些库中导出任何值。对于垫片,您需要先指定要导出的变量,然后才能引用它们。由于您没有导出任何内容,因此变量设置为空。

导出如下所示:

shim: {
    "angular": {
        exports: "angular"
    }
}

AMD/Requirejs 通过从它加载的文件中提取一个值并将其设置为回调函数中的命名参数来工作。对于普通的 AMD 文件,这就是传递给定义的函数的返回值是什么,或者是定义中的对象。但是对于垫片,您需要选择一个变量,通常是库的名称空间。这允许您为基于命名空间的库模拟 AMD

您可以查看有关 shims 的文档部分以了解更多详细信息。

于 2013-08-05T18:17:13.977 回答
1

您的语法错误,依赖项数组应该是第一个参数。

尝试

require(['angular'], function(angular) {
    console.log("requireJS done");
});
于 2013-08-05T09:23:28.683 回答
0

我必须导出一些库,以便在我的回调中可用。

shim: {
    'angular': {
        exports: 'angular'
    }
}
于 2013-08-05T18:13:37.343 回答