我正在使用汇总和 babel 转换一些 ES6 代码并将结果捆绑到一个文件中,但是我遇到了 babelHelpers 对象的一些问题。
rollup.config.js:
export default {
entry: './src/js/core.js',
dest: './dist/output.js',
format: 'iife',
plugins: [babel({
externalHelpers: true,
runtimeHelpers: true,
presets: ["es2015-rollup"]
})],
treeshake: false,
useStrict: true
};
.babelrc:
{
"presets": ["es2015-rollup"],
"plugins": [
"transform-class-properties",
"transform-es2015-classes",
"external-helpers-2"
]
}
和 package.json 的一部分:
"scripts": {
"start": "npm-run-all --parallel rollup:watch lint:watch",
"rollup": "rollup -c",
"rollup:watch": "rollup -c -w",
"lint": "esw rollup.config.* src/js/** --color",
"lint:watch": "npm run lint -- --watch"
},
"dependencies": {
"babel-helpers": "^6.16.0",
"babel-plugin-external-helpers": "^6.18.0",
"babel-plugin-external-helpers-2": "^6.3.13",
"babel-plugin-transform-class-properties": "^6.19.0",
"babel-plugin-transform-es2015-classes": "^6.18.0",
"babel-plugin-transform-runtime": "^6.15.0",
"babel-polyfill": "^6.16.0",
"babel-preset-es2015-rollup": "^1.2.0",
"babel-preset-latest": "^6.16.0",
"eslint": "^3.11.1",
"eslint-plugin-import": "^2.2.0",
"eslint-watch": "^2.1.14",
"npm-run-all": "^3.1.2",
"rollup": "^0.36.4",
"rollup-plugin-babel": "^2.6.1",
"rollup-plugin-uglify": "^1.0.1",
"rollup-watch": "^2.5.0"
}
核心.js:
var configOptions = {
range: [0, 5],
arg: "speak",
options: ["listen", "mute", "speak"]
};
function updateOptions(opt) {
if (configOptions.range == undefined) {
configOptions.range = opt.range;
}
}
updateOptions({});
class Hello {
print() {
}
}
new Hello().print();
捆绑输出:
(function () {
'use strict';
var configOptions = {
range: [0, 5],
arg: "speak",
options: ["listen", "mute", "speak"]
};
function updateOptions(opt) {
if (configOptions.range == undefined) {
configOptions.range = opt.range;
}
}
updateOptions({});
var Hello = function () {
function Hello() {
babelHelpers.classCallCheck(this, Hello);
}
babelHelpers.createClass(Hello, [{
key: "print",
value: function print() {}
}]);
return Hello;
}();
new Hello().print();
}());
正如您在 core.js 中看到的,我使用的是 ES6 类。我希望 babel 只为使用过的对象添加 polyfill。由于目前我只使用类,我希望 babel 只使用 checkClassCall 和其他函数来使“类”功能正常工作。但它为我的最终包添加了整个 polyfill 功能。
所以我做了一些研究,发现了“external-helpers-2”和选项:externalHelpers:true runtimeHelpers:true
它将每个 babel 功能打包在 babelHelpers 中,但我不知道如何使用最终 IIFE 顶部的所有功能生成对象。
编辑
如果我使用转换运行时,那么我会在控制台中得到它
将 'babel-runtime/helpers/classCallCheck' 视为外部依赖项 将 'babel-runtime/helpers/createClass' 视为外部依赖项 在 options.globa 中没有为外部模块 'babel-runtime/helpers/classCallCheck' 提供名称 ls – 猜测' _classCallCheck' 没有为 options.globals 中的外部模块 'babel-runtime/helpers/createClass' 提供名称 - 猜测 '_createClass'
_classCallCheck 和 _createClass 也被添加到我在最终汇总 IIFE 中的参数中