代码之家  ›  专栏  ›  技术社区  ›  Arnold Schrijver

汇总bundle node_模块到bundle.js吗?

  •  15
  • Arnold Schrijver  · 技术社区  · 7 年前

    我在试驾 rollupjs 将节点应用程序打包到 bundle.js

    rollup是否支持捆绑完整的节点应用程序(包括 node_modules ),或者只是项目中的js文件?

    index.js node_模块 )只想要一个 .我试过:

    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 转动这个 索引.js :

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

    使用此命令:

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

    到这个 bundle.js :

    (function () {
    'use strict';
    
    module.exports = require('dat-node');
    
    }());
    

    我试过:

    • 交换插件序列

    2 回复  |  直到 7 年前
        1
  •  13
  •   robertklep    7 年前

    试试这个:

    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 .

        2
  •  1
  •   Sayan Das    3 年前

    我也面临着同样的问题,搜索了很多,但答案大多是旧语法。经过一番探索,这对我来说是有效的。

    如果有更熟悉汇总的人来验证它,这将非常有帮助

    因此,我发现的诀窍是向nodeResolve插件添加ModuleOnly选项,如下所示:

    import nodeResolve from "@rollup/plugin-node-resolve";
    import commonjs from "@rollup/plugin-commonjs";
    
    export default {
      input: "src/index.js",
      output: [
        {
          format: "cjs",
          file: "dist/index.cjs.js",
        },
        {
          format: "esm",
          file: "dist/index.esm.js",
        },
      ],
      plugins: [
        commonjs(),
        nodeResolve({ modulesOnly: true }),
      ],
    };