回调方法中未定义RequireJS依赖项

RequireJS dependency undefined in callback method

本文关键字:依赖 RequireJS 未定义 方法 回调      更新时间:2023-09-26

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

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

导出如下所示:

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

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

有关更多详细信息,请参阅有关垫片的文档部分。

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

尝试

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

我不得不导出一些库,以便在回调中可用。

shim: {
    'angular': {
        exports: 'angular'
    }
}