汇总是否将node_modules捆绑到bundle.js中?

时间:2017-08-16 07:38:45

标签: javascript node.js npm bundling-and-minification rollupjs

我正在试用rollupjs将节点应用打包成bundle.js并感到困惑。

  

汇总是否支持捆绑整个节点应用程序(包括node_modules),或仅包含属于项目的js文件?

我有一个标准的节点项目(1 index.jsnode_modules中有数千个文件)并且只想要一个bundle.js。我试过了:

rollup.config.js

import commonjs from 'rollup-plugin-commonjs';
import nodeResolve from 'rollup-plugin-node-resolve';

export default {
entry: 'index.js',
dest: 'bundle.js',
format: 'iife',
plugins: [

    commonjs({
        // non-CommonJS modules will be ignored, but you can also
        // specifically include/exclude files
        include: 'node_modules/**',  // Default: undefined

        // if true then uses of `global` won't be dealt with by this plugin
        ignoreGlobal: false,  // Default: false

        // if false then skip sourceMap generation for CommonJS modules
        sourceMap: false,  // Default: true
    }),

    nodeResolve({
    jsnext: true,
    main: false
    })
]
};

无论我尝试rollup,我都会转变index.js

module.exports = require('dat-node') // 88 MB node_modules

使用此命令:

rollup index.js --format iife --output dist/bundle.js -c

到此bundle.js而不添加node_modules

中的任何内容
(function () {
'use strict';

module.exports = require('dat-node');

}());

我试过了:

  • 交换插件序列
  • 所有不同的命令行选项
  • 不同格式
  • 不同的配置文件设置

现在我在想,也许我理解汇总错误,它不支持我想要的东西。非常感谢!

1 个答案:

答案 0 :(得分:4)

试试这个:

import commonjs from "rollup-plugin-commonjs";
import nodeResolve from "rollup-plugin-node-resolve";

export default {
  entry      : "index.js",
  dest       : "bundle.js",
  moduleName : "myModule",
  format     : "iife",
  plugins    : [
    commonjs({
      // non-CommonJS modules will be ignored, but you can also
      // specifically include/exclude files
      include: [ "./index.js", "node_modules/**" ], // Default: undefined

      // if true then uses of `global` won't be dealt with by this plugin
      ignoreGlobal: false, // Default: false

      // if false then skip sourceMap generation for CommonJS modules
      sourceMap: false // Default: true
    }),

    nodeResolve({
      jsnext: true,
      main: false
    })
  ]
};

主要变化是您需要在index.js调用中包含commonjs,否则它将无法转换为ES6模块(这是nodeResolve需要的)

您还需要设置moduleName

NB :我没有专门针对dat-node进行测试,而是使用lodash进行测试。