我使用汇总和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"
}
core.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和“class”功能的其他功能。但它为我的最终捆绑添加了整个polyfill功能。
所以我做了一些研究,发现了“外部助手-2”和选项: externalHelpers:真 runtimeHelpers:真
它包含了babelHelpers中的每个babel功能,但我不知道如何使用我最终IIFE顶部的所有函数生成对象。
修改
如果我使用transform-runtime,那么我在控制台中得到它
将'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中的参数
答案 0 :(得分:1)
这就是我如何配置babel for rollup,可能适合你:
{
presets : [['es2015', {"modules": false}]],
runtimeHelpers : true,
exclude : 'node_modules/**',
plugins : ["external-helpers"]
}
如果非常重要,则使用es2015
代替es2015-rollup
答案 1 :(得分:0)
尝试从Rollup.js配置中删除externalHelpers
和runtimeHelpers
选项。 es2015-rollup
预设已包含帮助程序,因此只需使用它就足够了。
更新了Rollup.js配置:
export default {
entry: './src/js/core.js',
dest: './dist/output.js',
format: 'iife',
plugins: [babel({
presets: ["es2015-rollup"]
})],
treeshake: false,
useStrict: true
};