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
]
};
我们的构建过程是:
- 使用 tsc 从 typescript (src) 转译为 js (dist)
- 将应用程序捆绑(分发)到单个可运行文件中
我们宁愿不包含 babel 或 typescript 插件来转译,保持独立性,当然 (dist) 应用程序就足够了(因为它对 zeit/pkg 来说已经足够了)。
我们做错了什么吗?
问题是您的依赖项没有以正确的方式编码,您需要更正他们所做的代码错误。
我是使用 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
]
};
我们的构建过程是:
- 使用 tsc 从 typescript (src) 转译为 js (dist)
- 将应用程序捆绑(分发)到单个可运行文件中
我们宁愿不包含 babel 或 typescript 插件来转译,保持独立性,当然 (dist) 应用程序就足够了(因为它对 zeit/pkg 来说已经足够了)。
我们做错了什么吗?
问题是您的依赖项没有以正确的方式编码,您需要更正他们所做的代码错误。