React和Babel中的可选链算符

时间:2018-09-01 06:57:41

标签: reactjs babeljs babel

在我的项目中,我配置babel:

{
  "presets": ["react", "es2015","stage-1", "transform-optional-chaining"],
  "plugins": ["transform-runtime"]
}

这是我在devDependencies中的package.json

"devDependencies": {
    "babel-cli": "^7.0.0-alpha.19",
    "babel-loader": "^7.1.5",
    "babel-plugin-module-resolver": "^3.1.1",
    "babel-plugin-transform-optional-chaining": "^7.0.0-beta.3",
    "babel-plugin-transform-runtime": "^6.23.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-1": "^6.24.1",
    "copy-webpack-plugin": "^4.5.2",
    "css-loader": "^1.0.0",
    "file-loader": "^1.1.11",
    "html-webpack-plugin": "^3.2.0",
    "prettier": "^1.14.2",
    "react-hot-loader": "^4.3.4",
    "style-loader": "^0.22.1",
    "url-loader": "^1.1.1",
    "webpack": "^4.16.5",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.5"
  }

运行项目时出现此错误:

  

找不到模块“ babel-preset-transform-optional-chaining”

任何人都可以解释如何解决此错误吗?

2 个答案:

答案 0 :(得分:3)

transform-optional-chaining是一个插件(不是预设)。尝试将babel配置更改为:

{
  "presets": ["react", "es2015","stage-1"],
  "plugins": ["transform-runtime", "transform-optional-chaining"]
}

答案 1 :(得分:0)

似乎更大的问题是您混用了Babel的所有版本,所有这些版本都已过时。对于babel 7,但was not back-ported to babel 6,“ stage-1”预设中已经包含“ transform-optional-chaining”。

但是,为了使事情更混乱,请执行以下操作:babel has done away with stage-presets(并且Babel 6中已弃用es201x预设)。因此,在最新版本的babel中,您不仅 do 需要列出“ transform-optional-chaining”,而且还列出您正在使用的所有其他插件。

我认为这里唯一的真实选择(如果您想使用最新的插件)是升级到Babel 7的最新版本-包括很多更改,但最终还是必须这样做。您可以找到一个migration guide here

我想您可以在删除阶段预置之前找到一个Alpha版本,但这只是为您自己将来的工作,仍然可能仍然需要进行一些更改。