Может ли Babel включить зависимость regeneratorRuntime в сгенерированный код?

Используя babel для таргетинга на Node v4, кажется, что сгенерированный код зависит от модуля regeneratorRuntime, который не включен в вывод.

Из того, что я понимаю, кажется, что перед выполнением сгенерированного кода необходимо требовать модуль «regenerator-runtime/runtime» во время выполнения. (через https://babeljs.io/docs/en/usage#polyfill)

Скрипт генератора:

const babel = require('@babel/core');
const out = babel.transformSync(`
  (async () => {

  })();
`, {
  presets: [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "4"
        }
      }
    ]
  ]
});

Выход:

"use strict";

function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }

function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }

_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
  return regeneratorRuntime.wrap(function _callee$(_context) {
    while (1) {
      switch (_context.prev = _context.next) {
        case 0:
        case "end":
          return _context.stop();
      }
    }
  }, _callee);
}))();

Есть ли способ указать Babel включить модуль regeneratorRuntime в сгенерированный код?

Короче говоря, я хотел бы, чтобы сгенерированный вывод был автономным без каких-либо требований времени выполнения.


person lostsource    schedule 11.11.2020    source источник
comment
Пробовали ли вы вендоризировать среду выполнения регенератора в своем коде? Вы можете добавить его в свой вывод и импортировать: unpkg.com/regenerator-runtime@ 0.13.7/runtime.js   -  person macabeus    schedule 18.11.2020


Ответы (1)


Вы можете добавить эту функцию, установив @babel/plugin-transform-runtime в свой проект и указав ее в разделе плагинов вашей конфигурации babel.

Это пример работы .babelrc (файл конфигурации babel):

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "debug": false,
        "module": false,
        "useBuiltIns": "usage",
        "corejs": 3
      }
    ]
  ],
  "plugins": [
    "@babel/plugin-transform-runtime"
  ]
}

person Enrico Deleo    schedule 19.11.2020
comment
Я попробовал эту конфигурацию, однако вывод по-прежнему не содержал полифилов, необходимых во время выполнения. (он только добавил несколько операторов import в начало файла..) .. Цель (если возможно) состоит в том, чтобы Babel включал необходимые полифиллы в сам сгенерированный код. - person lostsource; 23.11.2020
comment
Я могу абсолютно подтвердить, что эта конфигурация работает, потому что я лично ее использую, возможно, вам нужно больше полифиллов, так как вы используете старую версию nodejs. Попробуйте добавить "targets": { "node": "v4.0.0" } в объект конфигурации preset-env. - person Enrico Deleo; 23.11.2020