Error: Identifier 'Reader' has already been declared while bundling fstream with rollup.js

Error: Identifier 'Reader' has already been declared while bundling fstream with rollup.js

我是使用 Rollup 配置东西的新手,我正在尝试将节点 CLI 应用程序配置为捆绑在单个 cli.bundle.js 文件中,该文件可通过简单节点 cli.bundle.js 执行之前不需要 npm install 任何东西。

附带说明一下,我们已经使用 zeit/pkg 成功地做到了这一点,但我们更愿意注意将所有 nodejs 可执行文件捆绑在里面,所以我们正在尝试使用 rollup 而不是 pkg。

我们遇到的问题是,在遍历应用程序的不同 node_modules 时,rollup.js 崩溃并出现错误:

[!] Error: Identifier 'Reader' has already been declared
../../common/js-common/node_modules/fstream/lib/file-reader.js (7:4)
5: var fs = require("graceful-fs")
6:   , fstream = require("../fstream.js")
7:   , Reader = fstream.Reader
       ^
8:   , inherits = require("inherits")
9:   , mkdir = require("mkdirp")
Error: Identifier 'Reader' has already been declared
    at error (/home/.../src/external-data/external-data-etl/node_modules/rollup/dist/shared/node-entry.js:5400:30)
    at Module.error (/home/.../src/external-data/external-data-etl/node_modules/rollup/dist/shared/node-entry.js:9820:16)
    at tryParse (/home/.../src/external-data/external-data-etl/node_modules/rollup/dist/shared/node-entry.js:9713:23)
    at Module.setSource (/home/.../src/external-data/external-data-etl/node_modules/rollup/dist/shared/node-entry.js:10076:33)
    at Promise.resolve.catch.then.then.then (/home/.../src/external-data/external-data-etl/node_modules/rollup/dist/shared/node-entry.js:12362:20)

在使用汇总查找此错误时,似乎人们在执行时比在捆绑时遇到的错误更多,所以我不知道我能做什么。这个重复的标识符在我无法控制的第 3 方代码中 :(

这是我的rollup.config.js

编辑:我尝试使用新的 @rollup/plugins 来查看是否有修复,但我仍然遇到同样的问题。

import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import json from '@rollup/plugin-json';

export default {
    input: 'dist/index.js',
    output: {
        format: 'cjs',
        file: './cli.bundle.js'   
    },
    plugins: [
        commonjs(),
        resolve(),
        json()  // asked and added when parsing 'got' package imported by 'download' package
    ]
};

我们的构建过程是:

  1. 使用 tsc 从 typescript (src) 转译为 js (dist)
  2. 将应用程序捆绑(分发)到单个可运行文件中

我们宁愿不包含 babel 或 typescript 插件来转译,保持独立性,当然 (dist) 应用程序就足够了(因为它对 zeit/pkg 来说已经足够了)。

我们做错了什么吗?

问题是您的依赖项没有以正确的方式编码,您需要更正他们所做的代码错误。