Fix babel/babel#2212
npm install babel-plugin-add-module-exportsbabel-plugin-add-module-exports
---
Why?
---
Babel@6 doesn't export default module.exports any more - T2212 Kill CommonJS default export behavior.
Babel@6 transforms the following file
``js`
export default 'foo'
into
`js`
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = 'foo';
Therefore, it is a need to use the ugly .default in node.js.
`js`
require('./bundle.js') // { default: 'foo' }
require('./bundle.js').default // 'foo'
This plugin follows the babel@5 behavior - add the module.exports if only the export default declaration exists.
`js`
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = 'foo';
module.exports = exports['default'];
Therefore, our old codes still work fine - the .default goes away. :wink:
`js`
require('./bundle.js') // foo
Usage
---
Install this plugin from npm:
`bash`
npm install babel-plugin-add-module-exports --save-devor
yarn add -D babel-plugin-add-module-exports
Write the name to babelrc. It works with preset-env to output CommonJS code:
`json`
{
"presets": ["@babel/env"],
"plugins": ["add-module-exports"]
}
However, the plugin doesn't change the pure-esmodule.
this plugin makes changes only when exists exports.default (in other words, using commonjs).
`json`
{
"presets": [["@babel/env", { "modules": false }]],
"plugins": ["add-module-exports"]
}
into
`js`
export default 'foo'
1.0.0 Currently support is commonjs and umd.amd
Doesn't support , systemjs modules(don't use. there are no plans to support at the moment).
Likewise, webpack doesn't perform commonjs transformation for codesplitting. Need to set commonjs conversion.
`json`
{
"presets": [["@babel/env", { "modules": "commonjs" }]],
"plugins": ["add-module-exports"]
}
Options
---
If you're exporting an object and wish to maintain compatibility with code using the require('./bundle.js').default syntax, you can optionally enable the addDefaultProperty option as follows:
`json`
{
"presets": ["env"],
"plugins": [
[
"add-module-exports",
{
"addDefaultProperty": true
}
]
]
}
This will cause a second line of code to be added which aliases the default name to the exported object like so:
`js``
module.exports = exports['default'];
module.exports.default = exports['default']
See also
---
* babel-plugin-experimental-syntax-dynamic-import
License
---
MIT