angular js 脚本中的多个 IIFE 并使用 RequireJS 注入

Multiple IIFE in angular js script and injecting using RequireJS

我需要使用 RequireJS 注入我的 angularJs 脚本文件,它工作正常。但是我不能在一个文件中写一个以上的 iife。在这种情况下,只有一个 iife 会被执行。以下是我的代码。

(function () {
define([
    'angular'
], function () {
    angular.module('framework', ['ui.router', 'pluggableViews'])
        .controller('appCtrl', function ($scope) {
            $scope.label = 'Test label';
        });
 });
})();

(function () {

define([
'angular'
], function () {

    angular.module('framework').config(['$urlRouterProvider',
        '$pluggableViewsProvider',
        function ($urlRouterProvider, $pluggableViewsProvider) {

            $urlRouterProvider.otherwise('/login');
        }]);

});
})();

上面的代码只执行了第一个iife。第二人生没有得到任何断点。使用 requireJS 时如何解决这个问题?如果我将两个 iife 都移到两个单独的文件中,那么它将起作用。但在所有情况下对我来说都是不可能的。请给我一个解决方案。

您在同一个文件中有多个匿名 define 调用。这是 RequireJS 无法处理的。当 RequireJS 遇到匿名 define 时,它使用用于加载文件的模块名称作为它将分配给匿名定义的模块的模块名称。这就是模块名称的由来。如果在同一个文件中有多个匿名 define,那么 RequireJS 应该做什么?两个模块不能有相同的名称,它不会为您发明名称。当单个文件中存在多个模块时,您必须通过将名称作为第一个参数传递给 define 来明确命名它们。 (这就是优化器 (r.js) 为您所做的。)

(理论上:两个不同的 RequireJS context 可能每个都有一个同名的模块,但这不能成为这里的一个因素,因为从同一个文件加载的两个模块将在相同的上下文。)

如果您想保留匿名 define 调用,请将这两个模块保存在单独的文件中。如果绝对必须将它们放在一个文件中,或者命名模块。我会将它们分开进行开发,并让捆绑器在生成用于部署的捆绑包时为它们命名。