如何包装使用RequireJS加载的外部库?

时间:2014-02-20 13:04:04

标签: requirejs

我已经使用requireJS设置了一个Angular应用程序。在部署之前,我将所有内容捆绑到一个唯一的文件中。通常,外部库没有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:

要包装的代码
define("angularParallax", ["angular"], function(){
  angular.module("duParallax",["duScroll","duParallax.directive"...
});

如何在不更改库本身的情况下实现最新效果?

修改 根据这个其他stackoverflow问题,这是它应该如何工作。但我也使用grunt-contrib-requirejs来捆绑我的代码,这可能就是问题所在。

Shim from grunt-contrib-requirejs not wrapping library

1 个答案:

答案 0 :(得分:2)

默认情况下,r.js不会包装非AMD兼容的库。 您需要将以下选项添加到grunt-requirejs-contrib设置:

wrapShim: true