babel-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
export default 'foo'
into
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = 'foo';
Therefore, it is a need to use the ugly .default
in node.js.
require('./bundle.js')
require('./bundle.js').default
This plugin follows the babel@5 behavior - add the module.exports
if only the export default
declaration exists.
'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:
require('./bundle.js')
Usage
Install this plugin from npm:
npm install babel-plugin-add-module-exports@next --save-dev
yarn add -D babel-plugin-add-module-exports@next
Write the name to babelrc. It works with preset-env to output CommonJS code:
{
"presets": ["env"],
"plugins": [
"add-module-exports"
]
}
v0.3.0
However, the plugin doesn't change the pure-esmodule.
this plugin makes changes only when exists exports.default
(in other words, using commonjs).
{
"presets": [["env", {"modules": false}]],
"plugins": [
"add-module-exports"
]
}
into
export default 'foo'
0.3.0
Currently support is commonjs
and umd
.
Doesn't support amd
, systemjs
modules(don't use. there are no plans to support at the moment).
Options
addDefaultProperty
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:
{
"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:
module.exports = exports['default'];
module.exports.default = exports['default']
License
MIT