Сконфигурируйте `@ babel / runtime-corejs3`, чтобы исключить es.date.now - PullRequest
3 голосов
/ 04 апреля 2020

Я пытаюсь помешать @babel/preset-env + @babel/plugin-transform-runtime + @babel/runtime-corejs3 заменить Date.now(), чтобы обойти проблему, препятствующую правильной работе @sinonjs/fake-timers .

Согласно документации для core- js, должен быть способ предотвратить применение полифилом es.date.now, но я не могу понять, как применить эту конфигурацию.

Пример

index.js

import FakeTimers from '@sinonjs/fake-timers'

FakeTimers.install()

console.log(new Date().getTime())
console.log(Date.now())

Babel Transpile

$(npm bin)/babel index.js
...
console.log(new Date().getTime());
console.log((0, _now["default"])());

Обратите внимание на последнюю строку выходного сигнала - я хочу, чтобы она была console.log(Date.now());

После просмотра документов на @babel/preset-env я чувствую, что опция exclude - это то, что я ищу, но я не могу заставить ее работать:

module.exports = {
  presets: [
    ['@babel/preset-env', { exclude: ['es.date.now'] }]
  ],
  plugins: [
    ['@babel/plugin-transform-runtime', { corejs: 3 }]
  ]
}

Вышеприведенное дает мне сообщение об ошибке:

> $(npm bin)/babel index.js
{ Invariant Violation: [BABEL] ./index.js: Invalid Option: The plugins/built-ins 'es.date.now' passed to the 'exclude' option are not
    valid. Please check data/[plugin-features|built-in-features].js in babel-preset-env (While processing: "./node_modules/@babel/preset-env/lib/index.js")
...

Как настроить Babel на исключение полифилла es.date.now во время перемещения?


Файлы проекта

package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/cli": "^7.8.4",
    "@babel/core": "^7.9.0",
    "@babel/plugin-transform-runtime": "^7.9.0",
    "@babel/preset-env": "^7.9.0",
    "@babel/register": "^7.9.0"
  },
  "dependencies": {
    "@babel/runtime": "^7.9.2",
    "@babel/runtime-corejs3": "^7.9.2",
    "@sinonjs/fake-timers": "^6.0.1"
  }
}

babel.config.js

module.exports = {
  presets: ['@babel/preset-env'],
  plugins: [
    ['@babel/plugin-transform-runtime', { corejs: 3 }]
  ]
}

1 Ответ

1 голос
/ 17 апреля 2020

См. https://github.com/babel/babel/issues/10008. plugin-transform-runtime не поддерживает цели браузера. plugin-transform-runtime и preset-env могут работать независимо друг от друга.

Итак, подведем итог. В настоящее время это не поддерживается

...