pkg.main, pkg.module are incompatible, so require("es6-error") behaves differently under Rollup/Webpack
andersk opened this issue · comments
Anders Kaseorg commented
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
, sorequire("es6-error").default
would work everywhere; or - add
ExtendableError.default = ExtendableError
for compatibility; or - remove
pkg.module
.