Как да обвивам външни библиотеки, заредени с RequireJS?

Настроих приложение Angular с requireJS. Преди внедряването обединявам всичко в един и уникален файл. Обикновено външните библиотеки нямат обвивка на requireJS 'define'.

Например библиотеката 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"...
});

Как мога да постигна най-новото, без да променя самата библиотека?

Редактиране: Според този друг въпрос на stackoverflow, ето как трябва да работи. Но също така използвам grunt-contrib-requirejs, за да обединя моя код и това може да е проблемът.

Shim от grunt-contrib-requirejs не опакова библиотека


person Vincent Peres    schedule 20.02.2014    source източник
comment
Съжалявам за „приоритета“, това е наследство, което ще премахна. Както можете да видите, Angular се зарежда от CDN, така че не е включен в останалите библиотеки. Това означава, че в моя генериран файл angular все още не е дефиниран, затова очаквам да бъде обвит в define и след това да се зареди, когато 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