AngularAMD + RequireJS: не удалось создать экземпляр модуля ngStorage
Поистине схожу с ума от этого:
Я пытаюсь объединить AngularJS и RequireJS. После нескольких неудачных попыток я обратился к AngularAMD. Я следовал основному процессу, но продолжаю получать эту неприятную ошибку:
Не удалось создать экземпляр модуля ngStorage из-за: Модуль 'ngStorage' недоступен! Вы либо неправильно написали имя модуля, либо забыли загрузить его...
ngStorage - это простой сторонний модуль Angular.
Вот мой main.js:
require.config({
paths: {
angular: 'js/angular.min',
angularAMD: 'js/angularAMD.min',
ngload: 'js/ngload.min',
ngStorage: 'js/ngStorage.min'
},
shim: {
angularAMD: ['angular'],
ngload: ['angularAMD'],
ngStorage: ['angular'] // Also tried with ['angularAMD'], and without this line at all
},
deps: ['js/app']
});
И мой app.js:
define(['angularAMD','ngStorage'], function(angularAMD) {
var app = angular.module('tyleApp', ['ngStorage']);
return angularAMD.bootstrap(app); // Fails here...
});
Я удалил все остальное из приложения, и оно просто перестало работать... Что я делаю не так?
Примечание: я также пробовал с:
define(['angularAMD','ngload!ngStorage'], function(angularAMD) {
Но тогда я получаю:
angularAMD не инициализирован. Сначала нужно вызвать angularAMD.bootstrap(app).
1 ответ
ngStorage уже определил следование AMD, поэтому вам не нужно писать шим для этого.
require.config({
paths: {
angular: 'js/angular.min',
angularAMD: 'js/angularAMD.min',
ngload: 'js/ngload.min',
ngStorage: 'js/ngStorage.min'
},
shim: {
angularAMD: ['angular'],
ngload: ['angularAMD'],
},
deps: ['js/app']
});
И в вашем app.js сохраните одно и то же имя ngStorage в ваших путях, это имя может быть другой строкой, если вы назовете его другим, в вашем случае ваш app.js выглядит нормально.
например, если вы используете другое имя в путях, скажем, в путях:angularStorage: 'js/ngStorage.min'
ваш apps.js будет:
define(['angularAMD','angularStorage'], function(angularAMD) {
var app = angular.module('tyleApp', ['ngStorage']);
return angularAMD.bootstrap(app);
});
Таким образом, вы используете 'angularStorage', как вы определили в requireJS, а angular.module() все равно будет использовать имя модуля 'ngStorage', которое определено в исходном коде ngStorage.