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"]
});
looseboolean,默认为 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;
strictboolean,默认为 false。
默认情况下,当使用 babel 导出时,会导出不可枚举的 __esModule 属性。在某些情况下,此属性用于确定导入的_是_默认导出,或者_包含_默认导出。
var foo = exports.foo = 5;
Object.defineProperty(exports, "__esModule", {
value: true
});
为了防止 __esModule 属性被导出,你可以将 strict 选项设置为 true。
noInteropboolean,默认为 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(以内联形式显示)。