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

Can I combine RequireJs modules AND require.js itself into one js-bundle

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

在生产环境中我有两个 js 文件:app.js 和 require.js

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

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

当运行.

时,这将导致两次请求js文件

问题:是否可以将所有模块和require.js本身全部合并到一个文件中,所以我只有一个请求时运行 ?

AlmondJS 听起来很合适,来自他们文档的片段:

A replacement AMD loader for RequireJS. It provides a minimal AMD API footprint that includes loader plugin support. Only useful for built/bundled AMD modules, does not do dynamic loading.

...

By including almond in the built file, there is no need for RequireJS. almond is around 1 kilobyte when minified with Closure Compiler and gzipped.

例如

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
}());

诚然我没有用过它,但我听说过它。

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

我必须通过 'include' r.js 选项包含 require.js。

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

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

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

现在我只能在页面上引用 'bundle.js' 并且有一个请求。

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