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.

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