Мне нужно ввести мои файлы скриптов angularJs с помощью RequireJS, и он работает правильно. Но я не могу написать больше одного 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. Второй iife не получает какой-либо точки останова. Как я могу исправить эту проблему при использовании requireJS? Если я переведу оба iife в два отдельных файла, он будет работать. Но во всех случаях это будет невозможно. Пожалуйста, предложите мне решение.
У вас есть несколько анонимных вызовов define
в одном файле. Это то, что RequireJS не может обработать. Когда RequireJS работает с анонимным define
, он использует имя модуля, которое использовалось для загрузки файла в качестве имени модуля, которое он будет присвоить анонимному модулю. Это то, как модуль получает свое имя. Если у вас более одного анонимного define
в одном файле, то что должен требовать RequireJS? Два модуля не могут иметь одно и то же имя, и он не собирается придумывать вам имена. Когда больше одного модуля присутствует в одном файле, вы должны указать их явно, передав имя в качестве первого параметра для define
. (Это то, что делает оптимизатор (r.js
) для вас.)
(Теоретически: два разных контекста RequireJS могут иметь модуль с тем же именем, но это не может быть фактором здесь, потому что два модуля, загруженные из того же файла, будут в одном контексте.)
Храните два модуля в отдельных файлах, если вы хотите сохранить анонимные вызовы define
. Или назовите модули, если вы абсолютно должны иметь их в одном файле. Я бы сохранил их отдельно для разработки, и пусть поставщик связывает их имена при создании пакета для развертывания.