nuǝɯ pǝɥsᴉꞁod mǝu
Learn how companies like Phone2Action are using npm in their front-end developmentJoin the conversation »

babel-plugin-add-module-exports

0.3.0-pre.2 • Public • Published

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') // { 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.

'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. 😉

require('./bundle.js') // foo

Usage

Install this plugin from npm:

npm install babel-plugin-add-module-exports@next --save-dev
# or 
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-pre

However, the plugin doesn't change the pure-esmodule. this plugin makes changes only when exists Object.defineProperty(exports,"__esModule", {value: true}); (in other words, using {modules:'commonjs'}).

{
  "presets": [["env", {"modules": false}]],
  "plugins": [
    "add-module-exports"
  ]
}

into

export default 'foo'

Also 0.3.0-pre doesn't support amd, umd, systemjs modules(not change it).

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

Install

npm i [email protected]

Version

0.3.0-pre.2

License

MIT

Unpacked Size

14.6 kB

Total Files

4

Last publish

Collaborators

  • avatar
  • avatar
  • avatar