Babel 7-ReferenceError:未定义regeneratorRuntime

Kay*_*Kay 21 javascript babel node.js webpack

我有一个应用程序,它是一个节点后端和一个反应前端。

当我尝试构建/运行节点应用程序时出现以下错误。

节点: v10.13.0

错误:

dist / index.js:314 regeneratorRuntime.mark(function _callee(productId){^

ReferenceError:未定义regeneratorRuntime

.babelrc

{
    "presets": [    [
        "@babel/preset-env", {
          "targets": {
            "node": "current"
          },
        }
      ], "@babel/preset-react"],
    "plugins": [
        "@babel/plugin-proposal-class-properties"
    ]
}
Run Code Online (Sandbox Code Playgroud)

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"]
            }),

        ]

    },
Run Code Online (Sandbox Code Playgroud)

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"
  }
Run Code Online (Sandbox Code Playgroud)

for*_*d04 83

Babel 7.4.0 及更高版本

有两种主要配置 - 一种用于应用程序,一种用于库。

选项 1:应用程序

何时使用: ? 对于应用程序?全局范围 polyfills ? 最小束尺寸 ? 通过targets? 无需处理 node_modulespolyfills

"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)
    }
  ]
]
Run Code Online (Sandbox Code Playgroud) 安装依赖:
npm i --save-dev @babel/preset-env

npm i regenerator-runtime core-js // run-time dependencies
// regenerator-runtime: transform (async) generators and `async`/`await`
// core-js: other ECMAScript features like Promise, Set, etc.
Run Code Online (Sandbox Code Playgroud)

@babel/preset-env 有选择地包含targetsBrowserslist查询指定的polyfills。有两种模式 -usage先尝试(更方便),否则entry(更灵活和健壮):

  • useBuiltIns 'usage':无需import手动操作。所有 polyfill 都会根据它们在文件中的代码使用情况自动添加。

  • useBuiltIns 'entry':在您的应用程序中添加这些import条目一次(!) - 类似于@babel/polyfill

    import "regenerator-runtime/runtime";
    import "core-js/stable"; // or more selective import, like "core-js/es/array"
    
    Run Code Online (Sandbox Code Playgroud)

延期

对于高级情况,您可能Babel 助手使用@babel/transform-runtime(dev) 和@babel/runtime(run-time)以进一步减少包大小 - 称为助手别名。

选项 2:图书馆

何时使用: ? 对于图书馆?没有全球范围的污染?包括所有的polyfill,不是选择性的?更大的束尺寸可忽略

npm i --save-dev @babel/preset-env

npm i regenerator-runtime core-js // run-time dependencies
// regenerator-runtime: transform (async) generators and `async`/`await`
// core-js: other ECMAScript features like Promise, Set, etc.
Run Code Online (Sandbox Code Playgroud) 安装编译时和运行时依赖项:
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)
Run Code Online (Sandbox Code Playgroud)

@babel/plugin-transform-runtime, @babel/runtime, @babel/runtime-corejs

延期

您还可以@babel/preset-env仅用于语法转换,使用useBuiltIns: false. 由于 library 选项不使用全局 polyfill,您可能还想转译node_modules- 请参阅该absoluteRuntime选项。

结束语

  • 谢谢你!在网格站点中运行笑话时遇到问题 (2认同)
  • 应该接受答案。不知道为什么 babel 官方网站上没有包含如此详细的信息。 (2认同)

koj*_*ow7 30

更新答案:

如果您使用的是Babel 7.4.0或更高版本,@babel/polyfill则已弃用。相反,您将要使用以下内容:

import "core-js/stable";
import "regenerator-runtime/runtime";
Run Code Online (Sandbox Code Playgroud)

使用yarn添加这些:

yarn add core-js
yarn add regenerator-runtime
Run Code Online (Sandbox Code Playgroud)

原始答案:

我刚遇到此问题,并遇到以下解决方案:

在package.json中,我有@babel/polyfill一个依赖项。但是,在我的index.js(我的主要js文件)中,我忽略了将以下行放在顶部:

import '@babel/polyfill'

导入后,一切正常。

正如其他答案所示,我不需要安装babel-runtime。

  • 哇,这是整个互联网上有关此问题的唯一最新答案 (5认同)
  • 您,我的朋友,应该得到一个cookie!其次,无需安装任何运行时 (3认同)
  • 通过 import "core-js/stable";` 导入 core-js/stable 会生成一个非常大的包。有没有办法告诉 Babel 只填充它需要的东西? (2认同)

Ale*_*lig 23

I had this error in my react project with webpack 4 and this was preventing the whole project to get rendered.

This is how I solved it:

Install plugin-transform-runtime:

npm install @babel/plugin-transform-runtime -D
Run Code Online (Sandbox Code Playgroud)

Add plugin-transform-runtime to the plugin's list in the .babelrc file:

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react"
  ],
  "plugins": [
    ["@babel/transform-runtime"]  // <= Add it here
  ]  
}
Run Code Online (Sandbox Code Playgroud)


Cyr*_*ris 19

这里已经有一个很好的答案(最初发布在Babel6问题上),我将翻译为Yarn。基本上,您需要babel运行时(不作为开发依赖项)和插件transform-runtime

yarn add @babel/runtime 
yarn add -D @babel/plugin-transform-runtime
Run Code Online (Sandbox Code Playgroud)

并且,在.babelrc中,添加:

{
    "presets": ["@babel/preset-env"],
    "plugins": [
        ["@babel/transform-runtime"]
    ]
}
Run Code Online (Sandbox Code Playgroud)