Uncaught ReferenceError: регенераторВремя выполнения не определено в React

Я получаю сообщение об ошибке "Uncaught ReferenceError: refreshratorRuntime is not defined". Пожалуйста, помогите мне найти ошибку и как ее решить. введите описание изображения здесь

7 ответов

  • Установите зависимость времени выполнения
npm i --save-dev @babel/plugin-transform-runtime
  • Добавьте плагин в ваш.babelrc файл
{
  "plugins": ["@babel/plugin-transform-runtime"]
}

Дополнительная информация:https://babeljs.io/docs/en/babel-plugin-transform-runtime

TL; DR;

  • Асинхронные функции - это абстракция поверх генераторов.
  • Асинхронные функции и генераторы теперь поддерживаются во всех основных браузерах, а также в Node10 и выше.
  • Если вы используете транспилятор (например, babel) для обратной совместимости, вам понадобится дополнительный "слой", который преобразует генераторы. Это подразумевает преобразование ES6 в ES5 во время выполнения, поскольку их синтаксис не имеет обратной совместимости. См. https://cmichel.io/how-are-generators-transpiled-to-es5

Спасибо Это работает, когда я добавляю оператор импорта - import regeneratorRuntime from "regenerator-runtime"; в компоненте я использую async/await.

просто добавь

        "browserslist": [
    "last 2 Chrome versions"
  ]

в конце ваших проектов package.jsonфайл, также обратите внимание, что его браузеры во множественном числе не являются браузерами!

Ваш файл в конце может выглядеть примерно так ->

        },
  "dependencies": {
    "prop-types": "^15.8.0",
    "react": "^17.0.1",
    "react-dom": "^17.0.1"
  },
  "browserslist": [
    "last 2 Chrome versions"
  ]
}

игнорируйте раздел зависимостей в приведенном выше представлении кода, это просто для справки о том, как может выглядеть ваш package.json.

2022

Если вы работаете с Babel 7 или более поздней версией, вам не нужно устанавливать дополнительный плагин (ни @babel/plugin-transform-runtimeили же @babel/plugin-transform-regeneratorили другие плагины).

Позже вам придется включать этот оператор каждый раз, когда вы используете async/awaitсинтаксис.

import regeneratorRuntime from "regenerator-runtime";

Возможно, если вы установили линтер в своем проекте, он предупредит вас о том, что оператор объявлен, но его значение никогда не читается, но я думаю, что это просто ошибка, потому что если вы удалите его, код не будет работать.

Я столкнулся с этой проблемой (используя Babel v7), и даже после того, как я последовал совету и установил соответствующие пакеты, я все еще не смог получить идентификатор этой ошибки. были проверены следующие сообщения о переполнении стека...

Помогли следующие действия:

  1. Перейдите в package.json и добавьте в jest следующее (скриншот также добавлен):

"moduleNameMapper": {
". +\.(css|styl| less | sass | scss |png|jpg| ttf | woff | woff2) $": "identity-obj-proxy"}

  1. при запуске теста используйте следующий суффикс в команде...

--setupFilesAfterEnv "./src/setupTests.js"

Итак, чтобы запустить тест, это будет:

$ jest /pathToTest/TestFile.test.js --setupFilesAfterEnv "./src/setupTests.js"

Надеюсь, это поможет кому-то, как помогло мне...

Если вам действительно необходимо использовать функцию async, приведенные выше решения должны работать. Другой способ решить эту проблему - использовать регулярные обещания, по крайней мере, так было в моем случае.

В моем случае, когда я импортирую «core-js/stable»; импортировать «регенератор-время выполнения/время выполнения»;сверху и установите зависимости, все работает хорошо.

Другие вопросы по тегам