首页 > 解决方案 > 错误:在将 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
    ]
};

我们的构建过程是:

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

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

我们做错了什么吗?

标签: node.jsrollupjs

解决方案


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


推荐阅读