Javascript Webpack babel loader运行时:模块生成失败:TypeError:this.setDynamic不是函数

Javascript Webpack babel loader运行时:模块生成失败:TypeError:this.setDynamic不是函数,javascript,webpack,babel-loader,Javascript,Webpack,Babel Loader,我正在尝试将babel加载程序与babel插件转换运行时一起使用 我已按照以下说明操作: 有关守则: rules: [ // the 'transform-runtime' plugin tells babel to require the runtime // instead of inlining it. { test: /\.js$/, exclude: /(node_modules|bower_components)/, use: { l

我正在尝试将
babel加载程序
babel插件转换运行时
一起使用

我已按照以下说明操作:

有关守则:

rules: [
  // the 'transform-runtime' plugin tells babel to require the runtime
  // instead of inlining it.
  {
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
      loader: 'babel-loader',
      options: {
        presets: ['@babel/preset-env'],
        plugins: ['@babel/transform-runtime']
      }
    }
  }
]
我在构建时遇到以下错误:

模块构建失败:错误:找不到模块“@babel/plugin transform runtime”

如果将插件名称更改为:
plugins:['transform-runtime']
,则会出现以下错误:

模块生成失败:类型错误:this.setDynamic不是一个函数


问题出在哪里?

您的网页条目看起来与示例相同,因此我想知道如果您使用
.babelrc
,会发生什么情况

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

你也安装了环境预设吗?

经过一番努力,我找到了正确的方法

Tl;dr

如果安装新的babel加载程序,则应加载新的babel插件

完整故事

在官方文档中安装:
npm安装巴别塔-loader@8.0.0-beta.0@babel/core@babel/preset env网页包

在github页面中,以下是
运行时插件的说明:

注意:您必须运行npm安装babel插件转换运行时 --保存dev以将其包含在您的项目中,并将babel运行时本身作为npm install babel runtime--save的依赖项

相反,您应该像这样使用新版本:

npm安装--保存dev@babel/plugin转换运行时
npm安装--保存@babel/runtime


然后,它将与文档中的配置一起工作。

首先,正如@yccteam指出的,需要安装

npm install --save-dev @babel/plugin-transform-runtime
npm install --save @babel/runtime
.babelrc文件应具有

{
  "presets": [
    ["@babel/preset-env", {
      "debug": false,
      "modules": false,
      "useBuiltIns": false
    }], 
    "@babel/preset-react"
  ],
  "plugins": [
    "syntax-dynamic-import",
    "@babel/plugin-transform-runtime",
    [ "@babel/plugin-proposal-class-properties", { "loose": true } ],
    "transform-async-to-generator"
  ],
  "env": {
    "production": {
      "presets": ["react-optimize"]
    }
  }
}
webpack.js文件应如下所示

 module: {
  rules: [
    {
      test: /(\.js[\S]{0,1})$/i,
      exclude: /node_modules/,
      loader: 'babel-loader',
      query: {
        presets: ['@babel/preset-react', '@babel/preset-env'],
        plugins: ['@babel/proposal-class-properties']
      },
    },
    ...

环境预设工作正常。实际上,整个项目在没有
运行时
插件的情况下编译得很好。如果我使用
.babelrc
并从
babel loader
配置中删除此插件,则会出现相同的错误。如果将加载行更改为:
loader:'babel',
,会发生什么情况。我想我前一阵子在什么地方读到过,那是一个补丁,但可能在想别的东西。也不管用<代码>未找到模块:错误:无法解析“babel”
当前的babel 7.4.0版本使用命名空间软件包,因此您必须将此插件列为
@babel/plugin transform runtime
,即使在babelrc dotfile中也不确定这是否是去年发生的更改,所以只想标记
syntax dynamic import
transform async to generator
都需要
@babel/syntax dynamic import
@babel/transform async to generator