Babel 7 - ReferenceError: регенератор Runtime не определен

У меня есть приложение, которое является бэкендом узла и интерфейсом реакции.

Я получаю следующую ошибку, когда пытаюсь собрать / запустить приложение моего узла.

Узел: v10.13.0

Ошибка:

dist / index.js: 314 регенератор Runtime.mark(функция _callee (productId) {^

ReferenceError: регенератор Runtime не определен

.babelrc

{
    "presets": [    [
        "@babel/preset-env", {
          "targets": {
            "node": "current"
          },
        }
      ], "@babel/preset-react"],
    "plugins": [
        "@babel/plugin-proposal-class-properties"
    ]
}

webpack.config.js

{
        mode: "development",
        entry: "./src/index.js",
        target: "node",
        externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
        stats: {
            colors: true
        },
        devtool: "source-map",

        output: {
            path: path.resolve(__dirname, "dist"),
            filename: "index.js",
            sourceMapFilename: "index.js.map"
        },
        module: {
            rules: [
                {
                    enforce: "pre",
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: "eslint-loader",
                },
                {
                    test: /\.m?js$/,
                    exclude: /(node_modules|bower_components)/,
                    use: {
                        loader: "babel-loader",
                        options: {
                            presets: ["@babel/preset-env"]
                        }
                    }
                }
            ],
        },
        node: {
            __dirname: false,
            __filename: false,
        },

        "plugins": [
            new CleanWebpackPlugin(),
            new WebpackShellPlugin({
                onBuildStart: [],
                onBuildEnd: ["nodemon dist/index.js"]
            }),

        ]

    },

package.json

 "dependencies": {
    "connect": "^3.6.6",
    "cors": "^2.8.5",
    "dotenv": "^6.1.0",
    "express": "^4.16.4",
    "hellojs": "^1.17.1",
    "i18n-iso-countries": "^3.7.8",
    "morgan": "^1.9.1",
    "react": "^16.6.3",
    "react-dom": "^16.6.3",
    "request": "^2.88.0",
    "request-promise-native": "^1.0.5",
    "serve-static": "^1.13.2",
    "vhost": "^3.0.2"
  },
  "devDependencies": {
    "@babel/cli": "^7.1.5",
    "@babel/core": "^7.1.6",
    "@babel/plugin-proposal-class-properties": "^7.1.0",
    "@babel/preset-env": "^7.1.6",
    "@babel/preset-react": "^7.0.0",
    "babel-eslint": "^10.0.1",
    "babel-loader": "^8.0.4",
    "clean-webpack-plugin": "^1.0.0",
    "copy-webpack-plugin": "^4.6.0",
    "css-loader": "^1.0.1",
    "eslint": "^5.9.0",
    "eslint-config-google": "^0.10.0",
    "eslint-loader": "^2.1.1",
    "eslint-plugin-react": "^7.11.1",
    "extract-loader": "^3.0.0",
    "file-loader": "^2.0.0",
    "node-sass": "^4.10.0",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.1",
    "webpack": "^4.26.0",
    "webpack-cli": "^3.1.2",
    "webpack-node-externals": "^1.7.2",
    "webpack-shell-plugin": "^0.5.0"
  }

9 ответов

Я только столкнулся с этой проблемой и наткнулся на следующее решение:

В package.json у меня было @babel/polyfill как зависимость. Однако в моем index.js (мой основной файл js) я пренебрег размещением следующей строки вверху:

import '@babel/polyfill'

После того, как я его импортировал, все работало нормально.

Мне не нужно было устанавливать babel-runtime, как подсказывают другие ответы.

Babel 7.4.0 и новее

Вариант 1: @ babel / preset-env

Когда использовать: ✔ для приложений ✔ незначительное / желательное загрязнение в глобальном масштабе ✔ наименьший размер пакета

"presets": [
  [
    "@babel/preset-env",
    {
      "useBuiltIns": "usage", // alternative mode: "entry"
      "corejs": 3, // default would be 2
      "targets": "> 0.25%, not dead" 
      // set your own target environment here (see Browserslist)
    }
  ]
]
Установите зависимости времени выполнения:
npm i regenerator-runtime core-js
// regenerator-runtime: transform (async) generators and `async`/`await`
// core-js: other ECMAScript features like Promise, Set, etc.

@babel/preset-env выборочно включает полифиллы дляtargets, Задается Browserslist запроса. Есть два режима - попробуйтеusage сначала (удобнее), иначе entry (более гибкий и надежный):

  • useBuiltIns 'usage': нет необходимостиimportничего вручную. Все полифиллы добавляются автоматически в зависимости от использования их кода в файле.
  • useBuiltIns 'entry': добавьте этиimportзаписи один раз (!) в вашем приложении - сродни@babel/polyfill:

    import "regenerator-runtime/runtime";
    import "core-js/stable"; // or a more selective import such as "core-js/es/array"
    

Вариант 2: https://babeljs.io/docs/en/babel-plugin-transform-runtime

Когда использовать: ✔ для библиотек ✔ отсутствие загрязнения глобальной области ✔ включает все полифиллы (больший размер пакета)

"plugins": [
  [
    "@babel/plugin-transform-runtime",
    {
      "regenerator": true,
      "corejs": 3
    }
  ]
]
Установите зависимости разработчика и среды выполнения:
npm i --save-dev @babel/plugin-transform-runtime // only for build phase

npm i @babel/runtime // runtime babel helpers + just regenerator runtime
// OR (choose one!)
npm i @babel/runtime-corejs3 
// also contains other JS polyfills (not only regenerator runtime)
// depends on core-js-pure ("ponyfills"/polyfills that don't pollute global scope)

Примечания к выпуску

  • Критическоеизменение: @ babel / polyfill устарела, начиная с Babel 7.4.0.

  • Наследие: если вы не можете переключиться наcore-js@3, установлен corejs возможность 2(см. миграции). Установить@babel/runtime-corejs2 в случае варианта 2 (@babel/plugin-transform-runtime).

  • В варианте 1 вы потенциально можете добавить @babel/transform-runtime+ время выполнения только для помощников Babel, чтобы немного уменьшить размер пакета, но это более сложный случай (просто чтобы упомянуть).

Здесь уже есть очень хороший ответ (первоначально размещенный на вопросе Babel6), который я просто переведу на Yarn. В основном вам нужно время выполнения babel (НЕ как зависимость dev) и плагин transform-runtime

yarn add @babel/runtime 
yarn add -D @babel/plugin-transform-runtime

И в.babelrc добавьте:

{
    "presets": ["@babel/preset-env"],
    "plugins": [
        ["@babel/transform-runtime"]
    ]
}

У меня была эта ошибка в моем react проект с webpack 4 и это мешало отрисовке всего проекта.

Вот как я это решил:

Установить plugin-transform-runtime:

npm install @babel/plugin-transform-runtime -D

Добавить plugin-transform-runtime в список плагинов в .babelrc файл:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "plugins": [
    ["@babel/transform-runtime"]  // <= Add it here
  ]  
}

Для меня работало:

      module.exports = {
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          esmodules: true,
        },
      },
    ],
  ],
}

Убедитесь, что вы используете @babel/runtime версии 7.18 или новее.

Я нашел объяснение этой ошибки и решение здесь:https://github.com/ant-design/pro-comComponents/issues/5273#issuecomment-1133843012

Я только что решил эту ошибку, когда импортировал babel-polyfill непосредственно в файл, который показывает ошибку, например, в сообщении об ошибке говорится: "ReferenceError: refreshratorRuntime не определен в /dist/models/usersSchema.js", поэтому я использую это в своем Файл usersSchema.js:

require("babel-polyfill");

(вы можете использовать import "babel-polyfill";также)

Вам нужно будет иметь регенератор Runtime.

Установите эти два пакета - babel-plugin-transform-Регенератор и babel-polyfill

Добавьте следующую конфигурацию Babel через .babelrc

{
  "plugins": ["transform-regenerator"]
}

Пользователи React.js

Если эта проблема возникла у вас при использовании реакции (в частности, при попытке использовать Async / Wait), Валентино Гальярди предоставил подробный подход в своем блоге относительно того, как решить эту проблему.

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