Как обернуть внешние библиотеки, загруженные с помощью RequireJS?

Я настроил приложение Angular с помощью requireJS. Перед развертыванием я объединяю все в один уникальный файл. Обычно внешние библиотеки не имеют обёртки «define» для requireJS.

Например, библиотека Angular Parallax написана так:

# https://github.com/durated/angular-parallax/blob/master/angular-parallax.min.js
angular.module("duParallax",["duScroll","duParallax.directive"...

Вот мой main.js:

require.config({
  baseUrl: '/angular-dev',
  paths: {
    angular: '//ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.min',
    angularScroll: 'bower_components/angular-scroll/angular-scroll.min',
    angularParallax: 'bower_components/ng-parallax/angular-parallax.min'
  },
  shim: {
    'angular': { exports: 'angular' },
    'angularScroll': { deps: ['angular'] },
    'angularParallax': { deps: ['angular'] }
  }
});

Я использую grunt-contrib-requirejs для объединения всех библиотек (не CDN) в один уникальный файл. Вот что я получаю после сборки всего:

angular.module("duParallax",["duScroll","duParallax.directive"...
define("angularParallax", ["angular"], function(){});

Но я ожидаю, что код будет обернут внутри определения:

define("angularParallax", ["angular"], function(){
  angular.module("duParallax",["duScroll","duParallax.directive"...
});

Как я могу получить последнюю версию, не меняя саму библиотеку?

Редактировать: Согласно этому другому вопросу о стеке, вот как это должно работать. Но я также использую grunt-contrib-requirejs для связывания своего кода, и это может быть проблемой.

Shim из библиотеки grunt-contrib-requirejs, не обертывающей библиотеку


person Vincent Peres    schedule 20.02.2014    source источник
comment
Извините за «приоритет», это наследие, которое я удалю. Как видите, Angular загружается из CDN, поэтому он не связан с остальными библиотеками. Это означает, что в моем сгенерированном файле angular еще не определен, поэтому я ожидаю, что он будет заключен в определение, а затем загружен, когда angular станет доступным.   -  person Vincent Peres    schedule 20.02.2014
comment
Тот бит, который вы добавили, я использую grunt-contrib-requirejs, чтобы затем связать все библиотеки, довольно много проясняет проблему, поэтому я отказываюсь от своего комментария. Да, он не делает то, что должен делать. К сожалению, я не использую этот инструмент, поэтому я не знаю, что вам нужно делать.   -  person Louis    schedule 20.02.2014
comment
Спасибо за вашу помощь, я надеюсь, что это прояснит для других!   -  person Vincent Peres    schedule 20.02.2014


Ответы (1)


По умолчанию r.js не поддерживает библиотеки, не совместимые с AMD. Вам нужно добавить следующую опцию в настройки grunt-requirejs-contrib:

wrapShim: true
person Vincent Peres    schedule 25.02.2014