Несколько IIFE в угловой JS-скрипт и инъекция с использованием RequireJS

0

Мне нужно ввести мои файлы скриптов 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 в два отдельных файла, он будет работать. Но во всех случаях это будет невозможно. Пожалуйста, предложите мне решение.

Теги:
requirejs

1 ответ

1
Лучший ответ

У вас есть несколько анонимных вызовов define в одном файле. Это то, что RequireJS не может обработать. Когда RequireJS работает с анонимным define, он использует имя модуля, которое использовалось для загрузки файла в качестве имени модуля, которое он будет присвоить анонимному модулю. Это то, как модуль получает свое имя. Если у вас более одного анонимного define в одном файле, то что должен требовать RequireJS? Два модуля не могут иметь одно и то же имя, и он не собирается придумывать вам имена. Когда больше одного модуля присутствует в одном файле, вы должны указать их явно, передав имя в качестве первого параметра для define. (Это то, что делает оптимизатор (r.js) для вас.)

(Теоретически: два разных контекста RequireJS могут иметь модуль с тем же именем, но это не может быть фактором здесь, потому что два модуля, загруженные из того же файла, будут в одном контексте.)

Храните два модуля в отдельных файлах, если вы хотите сохранить анонимные вызовы define. Или назовите модули, если вы абсолютно должны иметь их в одном файле. Я бы сохранил их отдельно для разработки, и пусть поставщик связывает их имена при создании пакета для развертывания.

  • 0
    Большое спасибо. Проблема исправлена. Я пересмотрел свой код в соответствии с вашим предложением. Я добавил имя для своего второго определения iife, например 'define (' modules / test2 ', [' angular '], function (angular) {', и пересмотрел мой раздел конфигурации config.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню