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

标签 javascript angularjs requirejs

我开始使用 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/

相关文章:

javascript - Require.js 默认方案如/lib/module/module.js

angularjs - 警告 [PhantomJS 1.9.8 (Mac OS X)] : Disconnected (1 times), 因为在 10000 毫秒内没有消息

jquery - RequireJS 不适合我

javascript - Express 4 - 如何正确提供来自其他文件的路由

javascript - 如何在html中控制视频何时结束

javascript - jquery onclick 切换最近的 UL

javascript - 使用 JQuery 每隔一定数量的 child 插入 HTML 元素

angularjs - 如何在 angular-chart.js 饼图中制作自定义图例

angularjs - 如何在Ionic 3中拦截动态链接

javascript - 等待 Angular 编译然后加载页面 [AngularJS]