bjyoungblood / es6-error

Easily-extendable error for use with ES6 classes

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

pkg.main, pkg.module are incompatible, so require("es6-error") behaves differently under Rollup/Webpack

andersk opened this issue · comments

In Node, require("es6-error") returns the function ExtendableError, but in Rollup or Webpack, require("es6-error") returns a module { default: ExtendableError }. This means an es6-error dependent can’t be compatible with both environments without contortions.

$ echo 'console.log(require("es6-error"))' > src.js
$ npm i quickselect webpack webpack-cli
$ node src.js
[Function: ExtendableError]
$ npx rollup src.js -p node-resolve -p commonjs -f cjs -o out.js
$ node out.js
[Object: null prototype] { default: [Function: ExtendableError] }
$ npx webpack -d
$ node dist/main.js 
Object [Module] { default: [Function: ExtendableError] }

This is because Node is using pkg.main (./lib/index), while Rollup and Webpack are using pkg.module (./es6/index.js), and the two files do not provide compatible interfaces.

Three potential solutions are:

  • disable babel-plugin-add-module-exports, so require("es6-error").default would work everywhere; or
  • add ExtendableError.default = ExtendableError for compatibility; or
  • remove pkg.module.