Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/59naga/babel-plugin-add-module-exports
【v0.2 no longer maintained】 Fix babel/babel#2212 - Follow the babel@5 behavior for babel@6
https://github.com/59naga/babel-plugin-add-module-exports
babel-plugin
Last synced: 7 days ago
JSON representation
【v0.2 no longer maintained】 Fix babel/babel#2212 - Follow the babel@5 behavior for babel@6
- Host: GitHub
- URL: https://github.com/59naga/babel-plugin-add-module-exports
- Owner: 59naga
- Created: 2015-11-10T17:48:54.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2022-12-03T09:52:30.000Z (about 2 years ago)
- Last Synced: 2025-01-05T15:00:18.452Z (14 days ago)
- Topics: babel-plugin
- Language: JavaScript
- Homepage:
- Size: 258 KB
- Stars: 728
- Watchers: 9
- Forks: 54
- Open Issues: 33
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-github-star - babel-plugin-add-module-exports - Follow the babel@5 behavior for babel@6 | 59naga | 729 | (JavaScript)
README
babel-plugin-add-module-exports
---Why?
---Babel@6 doesn't export default `module.exports` any more - [T2212 *Kill CommonJS default export behavior*](https://phabricator.babeljs.io/T2212).
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-dev
# or
yarn add -D babel-plugin-add-module-exports
```Write the name to [babelrc](https://babeljs.io/docs/usage/babelrc/). It works with [preset-env](http://babeljs.io/docs/en/babel-preset-env/) to output CommonJS code:
```json
{
"presets": ["@babel/env"],
"plugins": ["add-module-exports"]
}
```### modules: false
**However, the plugin doesn't change the pure-esmodule**.
this plugin makes changes only when exists `exports.default` (in other words, using [commonjs](https://babeljs.io/docs/en/babel-plugin-transform-es2015-modules-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`.
Doesn't support `amd`, `systemjs` modules(don't use. there are no plans to support at the moment).### with Webpack
Likewise, webpack doesn't perform commonjs transformation for [codesplitting](https://webpack.js.org/guides/code-splitting/). Need to set commonjs conversion.
```json
{
"presets": [["@babel/env", { "modules": "commonjs" }]],
"plugins": ["add-module-exports"]
}
```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:
```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](https://github.com/59naga/babel-plugin-experimental-syntax-dynamic-import)License
---
[MIT](http://59naga.mit-license.org/)