JR Utily
JR Utily

Reputation: 1852

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

I'm new with configuring stuff with Rollup, I'm trying to configure a node CLI app to be bundled in a single cli.bundle.js file that would be executable with a simple node cli.bundle.js without needing to npm install anything before.

On a side note, we already have succeed in doing so with zeit/pkg, but we would rather note have all the nodejs executable bundled inside, so we are trying work with rollup instead of pkg.

The problem we encounter is that when going through the different node_modules of the application, 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)

While looking for this error with rollup, it seems people were having it more at execution time than at bundle time, so I have no clue of what I can do. This duplicated identifier is in a 3rd party code I don't control :(

Here is my rollup.config.js

Edit: I tried with the new @rollup/plugins to see if there were a fix in them, but I have still the same issue.

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
    ]
};

And our building process is :

  1. transpile from typescript (src) to js (dist) with tsc
  2. bundle (dist) app into single runnable file

We would rather not include babel or typescript plugin to transpile, to stay independant, and certainly the (dist) app is enough (as it was enough for zeit/pkg).

Is there something we are doing wrong ?

Upvotes: 1

Views: 779

Answers (1)

frank-dspeed
frank-dspeed

Reputation: 1112

The Problem is your dependency it is not coded in the right way you will need to correct the code error they did.

Upvotes: 1

Related Questions