2016-12-05 3 views
0

Я использую 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

+0

Вы пытались установить babel-plugin-transform-runtime? Он должен содержать помощников, в которых вы нуждаетесь. – misha130

+0

Я попробовал. Результатом было 2 добавленных параметра для моего IIFE _classCallCheck, _createClass, но это не решает мою проблему. Также это было добавлено _classCallCheck = 'default' в _classCallCheck? _classCallCheck ['default']: _classCallCheck; _createClass = 'default' в _createClass? _createClass ['default']: _createClass; ... Я хочу, чтобы Babel вставлял функции classCallCheck и createClass в TOP моего IIFE, а не ссылался на них как внешние – Balbi

ответ

0

Попробуйте удалить externalHelpers и runtimeHelpers варианты с вашего Rollup.js конфигурации. es2015-rollup preset уже содержит помощников, поэтому просто использовать его должно быть достаточно.

Обновлено Rollup.js конфигурации:

export default { 
    entry: './src/js/core.js', 
    dest: './dist/output.js', 
    format: 'iife', 
    plugins: [babel({ 
    presets: ["es2015-rollup"] 
    })], 
    treeshake: false, 
    useStrict: true 
}; 
+0

Все еще не работает. В комплект входит целый полиполк ... Мне нужны только некоторые функции – Balbi

1

Это, как я настроить столпотворение на накопительный пакет, может работать для вас:

{ 
    presets  : [['es2015', {"modules": false}]], 
    runtimeHelpers : true, 
    exclude  : 'node_modules/**', 
    plugins  : ["external-helpers"] 
} 

если это очень важно использовать es2015 вместо es2015-rollup

Смежные вопросы