node.js - 错误:在将 fstream 与 rollup.js 捆绑时,已经声明了标识符“Reader”
问题描述
我是使用 Rollup 配置东西的新手,我正在尝试将节点 CLI 应用程序配置为捆绑在单个 cli.bundle.js 文件中,该文件可以使用简单的节点 cli.bundle.js 执行,而无需 npm install之前的任何事情。
附带说明一下,我们已经使用 zeit/pkg 成功地做到了这一点,但我们宁愿注意将所有 nodejs 可执行文件捆绑在里面,所以我们正在尝试使用 rollup 而不是 pkg。
我们遇到的问题是,在遍历应用程序的不同node_modules时,rollup.js crash with error:
[!] 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)
- 将(dist)应用程序捆绑到单个可运行文件中
我们宁愿不包含 babel 或 typescript 插件来转换,保持独立,当然 (dist) 应用程序就足够了(因为它对于 zeit/pkg 来说已经足够了)。
我们做错了什么吗?
解决方案
问题是您的依赖关系没有以正确的方式编码,您需要更正他们所做的代码错误。
推荐阅读
- kubernetes - AWS EKS:我是否需要在安装 external-dns 之前删除 kube-dns?
- java - 具有身份验证的 Apache HttpClient Socks5 代理
- apache-kafka - Kafka连接基于密钥的读取值并写入HDFS
- php - 如何使用 MailChimp API 添加/放置地址?
- ionic-framework - Ionic Linking to ionic pro error in "cordova plugin add cordova-plugin-ionic"
- regex - Symfony - 一条消息用于多个断言
- graphql - 如何在多种类型上使用 GraphQL 片段
- sql - Oracle SQL 中的自联接 - 基于 1 个相同列和 1 个不同列选择行
- excel - VB6检查Excel工作簿是否打开
- bash - bash sqlite3 变量不会插入数据库