Babel 6 Changes
Babel 6 changed some behavior by not doing
module.exports = exports['default']
anymore in the modules transforms.There are some caveats, but you can use babel-plugin-add-module-exports, so that updating to Babel 6 isn't a breaking change since users that don't use ES modules don't have to do
require("your-module").default
.However, it may not match how Node eventually implements ES modules natively given the the current proposal.
This plugin transforms ES2015 modules to CommonJS.
输入
export default 42;
输出
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = 42;
npm install --save-dev babel-plugin-transform-es2015-modules-commonjs
.babelrc
(推荐).babelrc
// 未包含选项
{
"plugins": ["transform-es2015-modules-commonjs"]
}
// 包含选项
{
"plugins": [
["transform-es2015-modules-commonjs", {
"allowTopLevelThis": true
}]
]
}
babel --plugins transform-es2015-modules-commonjs script.js
require("babel-core").transform("code", {
plugins: ["transform-es2015-modules-commonjs"]
});
loose
boolean
,默认为 false
。
就规范而言,import
和 export
只允许在顶层使用。在松散模式(loose)下,这些允许在任何地方使用。
默认情况下,当使用 babel 导出时,会导出不可枚举 __esModule
属性。
var foo = exports.foo = 5;
Object.defineProperty(exports, "__esModule", {
value: true
});
在不支持此功能的环境中,你可以使用 babel-plugin-transform-es2015-modules-commonjs
上启用松散模式下,将使用赋值的方式代替使用 Object.defineProperty
。
var foo = exports.foo = 5;
exports.__esModule = true;
strict
boolean
,默认为 false
。
默认情况下,当使用 babel 导出时,会导出不可枚举的 __esModule
属性。在某些情况下,此属性用于确定导入的_是_默认导出,或者_包含_默认导出。
var foo = exports.foo = 5;
Object.defineProperty(exports, "__esModule", {
value: true
});
为了防止 __esModule
属性被导出,你可以将 strict
选项设置为 true
。
noInterop
boolean
,默认为 false
默认情况下,当使用 babel 导出时,会导出不可枚举的 __esModule
属性。然后使用该属性确定导入的_是_默认导出,或者_包含_默认导出。
"use strict";
var _foo = require("foo");
var _foo2 = _interopRequireDefault(_foo);
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : { default: obj };
}
在不需要自动解包 default
的情况下,可以将 noInterop
选项设置为 true
以避免使用 interopRequireDefault
helper(以内联形式显示)。