Отключить обещание транспиляции с помощью babel-preset-env? - PullRequest
0 голосов
/ 08 октября 2018

Я использую babel-preset-env (Вавилон 6) и не могу узнать, как отключить "обещание" транспиляции.

Я пытался использовать:

{
  "presets": [
    [
      "env",
      {
        "exclude": ["transform-async-to-generator", "es6.promise"]
      }
    ]
  ],
  "plugins": [
    "transform-object-rest-spread",
    "transform-class-properties",
    [
      "fast-async",
      {
        "spec": true,
        "compiler": { "promises": true, "generators": false }
      }
    ]
  ]
}

и, хотя он не выдает никаких ошибок (в отличие от случая, когда передается недопустимая опция), он все же переносит обещания в runtimeGenerator функции.

Как сделать так, чтобы babel-preset-envвсе перенести, но сохранить обещания?

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Хорошо, теперь с фактическим .babelrc и упоминанием fast-async и т. Д. ... Подобного .babelrc, кажется, достаточно для использования fast-async вместо regenerator-runtime и т. Д.

{
  "presets": [
    [
      "env",
      {
        "exclude": ["babel-plugin-transform-async-to-generator", "babel-plugin-transform-regenerator"]
      }
    ]
  ],
  "plugins": [
    [
      "fast-async",
      {
        "spec": true,
        "compiler": { "promises": true, "generators": false }
      }
    ]
  ]
}
0 голосов
/ 08 октября 2018

Обещания не должны передаваться чему-либо, используя babel-preset-env.async / await есть, однако.Вы можете видеть здесь на игровой площадке Babel , что

const x = () => new Promise((res) => res('hi'));

const y = async () => {
  const z = await x();
};

переносится в

'use strict';

function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }

var x = function x() {
  return new Promise(function (res) {
    return res('hi');
  });
};

var y = function () {
  var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
    var z;
    return regeneratorRuntime.wrap(function _callee$(_context) {
      while (1) {
        switch (_context.prev = _context.next) {
          case 0:
            _context.next = 2;
            return x();

          case 2:
            z = _context.sent;

          case 3:
          case 'end':
            return _context.stop();
        }
      }
    }, _callee, undefined);
  }));

  return function y() {
    return _ref.apply(this, arguments);
  };
}();

с использованием настроек env по умолчанию.Если вы измените строку env, скажем, chrome>60 (или, что интересно, >4%!), Код будет передан как есть, так как Chrome> 60 изначально поддерживает функции async / await и arrow.

...