Подтвердить что ты не робот

Как использовать 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 как допустимый параметр.

4b9b3361

Ответ 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"
    ]
  }
}