我可以将RequireJs模块和require.js本身组合成一个js-bundle

时间:2015-02-05 10:50:01

标签: javascript requirejs requirejs-optimizer

我正在使用RequireJs Optimizer将所有模块合并到一个文件中 - app.js

在制作时我有两个js文件:app.js和require.js

生产HTML具有以下脚本标记:

<script data-main="app.js" src="require.js"></script>

这将在运行时导致两个js文件请求。

问题:是否可以将包括所有模块和require.js本身在内的所有内容合并到一个文件中,因此我在运行时只有一个请求?

2 个答案:

答案 0 :(得分:3)

答案在http://requirejs.org/docs/optimization.html#onejs

我必须包括require.js通过&#39; include&#39; r.js选项。

使用gulp任务和gulp-requirejs,它看起来像这样:

requirejs({
   paths: {
      requireLib: 'lib/require'
   },
   include: ['requireLib'],
   out: 'bundle.js'
 })
.pipe(insert.append('require(["app"]);'))

注意我必须将require(["app"])附加到js-bundle的末尾才能启动主模块。

现在我只能参考&#39; bundle.js&#39;在页面上有一个请求。

<script type="text/javascript" src="bundle.js"></script>

答案 1 :(得分:2)

AlmondJS听起来很合适,从他们的文档中摘录:

  

RequireJS的替代AMD加载程序。它提供了最小的AMD API   足迹包括加载程序插件支持。只对有用   内置/捆绑的AMD模块,不进行动态加载。

...

  

通过在构建文件中包含杏仁,不需要RequireJS。   使用Closure Compiler和缩小时,杏仁约为1千字节   gzip压缩。

例如

node r.js -o baseUrl=. name=path/to/almond include=main out=main-built.js wrap=true

将输出如下内容:

(function () {
    //almond will be here
    //main and its nested dependencies will be here
}());

不可否认,我没有使用它,但我已经听说过了。