首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rollup是否将node_modules捆绑到bundle.js中?

rollup是否将node_modules捆绑到bundle.js中?
EN

Stack Overflow用户
提问于 2017-08-16 07:38:45
回答 2查看 14.5K关注 0票数 17

我正在测试如何驱动卷式将一个节点应用程序打包到一个bundle.js中,我感到很困惑。

rollup支持捆绑完整的节点应用程序(包括node_modules),还是只支持属于项目一部分的js文件?

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

rollup.config.js

代码语言:javascript
复制
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

代码语言:javascript
复制
module.exports = require('dat-node') // 88 MB node_modules

使用此命令:

代码语言:javascript
复制
rollup index.js --format iife --output dist/bundle.js -c

到此bundle.js,而不添加来自node_modules的任何内容。

代码语言:javascript
复制
(function () {
'use strict';

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

}());

我试过:

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

现在我在想,也许我理解错了,它不支持我想要的。非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-16 08:07:29

试试这个:

代码语言:javascript
复制
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测试的。

票数 13
EN

Stack Overflow用户

发布于 2022-01-01 06:40:32

我也面临着同样的问题,我搜索了很多,但答案大多是旧的语法。经过一番探索,这才是对我有用的。我不能百分之百肯定这是最好的方法。

如果对卷起有更多了解的人来验证它,那将是非常有帮助的。

因此,我发现的诀窍是将modulesOnly选项添加到nodeResolve插件中,如下所示:

代码语言:javascript
复制
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 }),
  ],
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45707711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档