Как использовать babel-runtime в Babel 6?
Я пытаюсь создать модуль npm, и я не могу найти одну инструкцию на официальном сайте babeljs. Как вы используете пакет babel-runtime? От имени я предполагаю, что он должен быть помещен в раздел "зависимости" package.json, правильно?
Абсолютно никакой информации здесь: https://github.com/babel/babel/tree/master/packages/babel-runtime
Нашел один пример здесь: https://strongloop.com/strongblog/javascript-babel-future/, но когда я запускаю "babel -h", он не перечисляет --optional как допустимый параметр.
Ответы
Ответ 1
Время выполнения не является обязательным, но, как и все остальное в Babel 6, оно в первую очередь включено добавлением плагина. В этом случае вам нужно http://babeljs.io/docs/plugins/transform-runtime/
plugins: ["transform-runtime"]
-
babel-runtime
- это пакет, содержащий polyfill и многие другие вещи, которые Бабель может ссылаться. Вы должны установить его в своем приложении с помощью npm install babel-runtime
-
transform-runtime
- это плагин Babel для обработки исходного кода и ввода инструкций import foo from "babel-runtime"
, так что babel-runtime
фактически используется. Вы также установили бы это с помощью npm install babel-plugin-transform-runtime
.
Ответ 2
Обоснование
При перекодировании кода Babel фактически вводит помощников для эмуляции функций, не поддерживаемых вашей целевой версией ES.
Например, class MyClass {}
использует встроенный вспомогательный _classCallCheck
, к которому также можно получить доступ через require('babel-runtime/helpers/classCallCheck')
.
По умолчанию эти помощники не разделяются между единицами компиляции (файлы). Команда Бабеля, хотя может быть интересно централизовать всех этих помощников в одном месте в какой-то момент, особенно когда они используются несколько раз.
Эта проблема была решена путем создания плагина babel-plugin-transform-runtime
, который проходит АСТ и заменяет инъекции помощников соответствующим требованием к модулю babel-runtime
. Таким образом, помощники распределяются между кодовой базой и дублирование исключается.
Как использовать его
Предполагая, что у вас есть работающая среда Babel:
- Установите
babel-plugin-transform-runtime
(как devDependency
), который преобразует ваш код, чтобы удалить помощники и использовать те, что указаны в babel-runtime
. Вам нужно добавить его в массив plugins
в настройке Babel
- Установите
babel-runtime
(как dependency
), который является фактической библиотекой babel-plugin-transform-runtime
, предполагается, что вы будете иметь в своем dependencies
, это будет использоваться вашим транслированным кодом во время выполнения. Вам нужно только установить его (не требуйте).
Минимальный фрагмент
-
npm run build
скомпилирует папку lib
в dist
-
npm start
запускает папку dist
(которая зависит от babel-runtime
)
package.json
{
"scripts": {
"build": "babel lib --out-dir=dist",
"start": "node dist"
},
"dependencies": {
"babel-runtime": "^6.9.2"
},
"devDependencies": {
"babel-cli": "^6.10.1",
"babel-plugin-transform-runtime": "^6.9.0"
},
"babel": {
"plugins": [
"transform-runtime"
]
}
}