Я использую rollup и babel, чтобы перекрыть некоторый код ES6 и расслоить результат в один файл, но я столкнулся с некоторыми проблемами с объектом babelHelpers.rollupjs - 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 будет добавлять только полисы для используемых объектов. Поскольку в настоящее время я использую только класс, я бы ожидал, что babel будет использовать только checkClassCall и другие функции для работы класса. Но он добавляет всю функциональность полиполнения в мой последний пакет.
Так что я сделал некоторые исследования и обнаружили, о «внешних хелперов-2» и варианты: externalHelpers: истинные runtimeHelpers: истинные
, который упаковывает все функциональные возможности Бабель внутри babelHelpers, но я не знаю, как генерировать объект со всеми функциями в верхней части моего финального IIFE.
EDIT
Если я использую спектрально-среды выполнения, то я получаю это в консоли
Лечащий 'столпотворение-времени выполнения/хелперы/classCallCheck', как внешняя зависимость Лечение «столпотворение-выполнения/хелперов/createClass 'как внешняя зависимость Не указано имя для внешнего модуля' babel-runtime/helpers/classCallCheck 'в options.globa ls - guessing' _classCallCheck ' Не указано имя для внешнего модуля' babel-runtime/helpers/createClass 'в options.globals - угадывание «_createClass»
также _classCallCheck и _createClass добавляются мои параметры в окончательном накопительный пакет IIFE
Вы пытались установить babel-plugin-transform-runtime? Он должен содержать помощников, в которых вы нуждаетесь. – misha130
Я попробовал. Результатом было 2 добавленных параметра для моего IIFE _classCallCheck, _createClass, но это не решает мою проблему. Также это было добавлено _classCallCheck = 'default' в _classCallCheck? _classCallCheck ['default']: _classCallCheck; _createClass = 'default' в _createClass? _createClass ['default']: _createClass; ... Я хочу, чтобы Babel вставлял функции classCallCheck и createClass в TOP моего IIFE, а не ссылался на них как внешние – Balbi