Определить в функции require (requireJS)

(С использованием requireJS, angularJS, angularAMD)

Когда в моем файле main.js у меня есть:

require.config({
    baseUrl: "js",
    paths: {
        'angular': 'libs/angularjs/angular.min',
        'angularAMD': 'libs/angularjs/angularAMD.min'
    },
    shim: {
        'angularAMD': ['angular']
    }
});

define(['angularAMD'], function (angularAMD) {
    var app = angular.module("app", []);
    app.controller("testCtrl", function ($scope) {
        $scope.message = "udało się!";
    });
    angularAMD.bootstrap(app);
    return app;
});

все отлично работает Но когда я вырезал часть конфигурации в другой файл, я получил ошибки:

main.js:

require(['common'], function (common) {
    define(['angularAMD'], function (angularAMD) {
        var app = angular.module("app", []);
        app.controller("testCtrl", function ($scope) {
            $scope.message = "udało się!";
        });
        angularAMD.bootstrap(app);
        return app;
    });
});

common.js

require.config({
    baseUrl: "js",
    paths: {
        'angular': 'libs/angularjs/angular.min',
        'angularAMD': 'libs/angularjs/angularAMD.min'
    },
    shim: {
        'angularAMD': ['angular']
    }
});

Могу ли я использовать функцию define в require? Если нет, то как сначала включить общий конфиг, а затем использовать определение?

1 ответ

Решение

Я предполагаю, что ваш main.js файл - это то, что вы даете data-main атрибут на <script> тег, который загружает RequireJS или является главной точкой входа вашего приложения. + Изменить main.js к этому:

require(['common'], function (common) {
    require(['app']);
});

И создать app.js Модуль в месте, где ваш код может легко загрузить его:

define(['angularAMD'], function (angularAMD) {
    var app = angular.module("app", []);
    app.controller("testCtrl", function ($scope) {
        $scope.message = "udało się!";
    });
    angularAMD.bootstrap(app);
    return app;
});

Все, что требует доступа к значению app вы создаете в этом модуле может просто потребовать app модуль.

Код в вашем вопросе определяет модуль, но делает это асинхронно. Ко времени звонка define случается, RequireJS уже закончил загрузку main, Что касается этого, main готово. Так какое имя он должен дать определенному модулю?

Другие вопросы по тегам