javascript - 从 7 升级到 Babel-loader 8?我需要改变什么?

标签 javascript npm babeljs

我正在尝试从版本 7 升级到版本 8。但我遇到了一些错误。

我想我需要升级一些东西但不确定是什么

这就是我的包(我删除了与我的问题无关的插件)

 "dependencies": {
    "babel-plugin-emotion": "^9.2.5",
    "babel-polyfill": "^6.26.0",
    "http-proxy-middleware": "^0.18.0",
    "koa-connect": "^2.0.1",
    "koa-router": "^7.4.0",
    "koa2-connect-history-api-fallback": "0.0.6",
    "npm": "^6.1.0",
    "react": "^16.4.0",
    "react-dom": "^16.4.0",
    "react-emotion": "^9.2.5",
    "react-responsive-modal": "^3.3.0",
    "react-router-dom": "^4.2.2",

  },
  "devDependencies": {
    "babel-core": "^6.26.3",
    "babel-loader": "^7.1.4",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "babel-plugin-transform-object-assign": "^6.22.0",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-preset-env": "^1.7.0",
    "babel-preset-react": "^6.24.1",
    "cross-env": "^5.2.0",
    "css-loader": "^1.0.0",
    "html-webpack-plugin": "^3.2.0",
    "mobx-react-router": "^4.0.4",
    "node-sass": "^4.9.0",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.0",
    "webpack": "^4.16.5",
    "webpack-bundle-analyzer": "^2.13.1",
    "webpack-cli": "^3.1.0",
    "webpack-dev-server": "^3.1.4"
  }

我的 .baelrc 里有

{
  "presets": ["env", "react"],
   "plugins": ["transform-decorators-legacy", "transform-class-properties", "transform-object-rest-spread", "emotion"]
}

我看到我需要升级 babel-core、preset-env、preset-react 等东西,但我不确定还有什么。

我收到这个错误

ERROR in ./src/index.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: Plugin/Preset files are not allowed to export objects, only functions.

编辑我最新的配置(现在似乎可以工作了)

.babelrc

{
  "presets": ["@babel/env", "@babel/react"],
  "plugins": [
    ["@babel/plugin-proposal-decorators", { "legacy": true }],
    "@babel/plugin-transform-object-assign",
    "@babel/plugin-proposal-object-rest-spread",
    "transform-class-properties"
  ]
}

包.json

  "dependencies": {
    "@babel/polyfill": "^7.0.0",
  },
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-decorators": "^7.0.0",
    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
    "@babel/plugin-transform-object-assign": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.0",
    "babel-plugin-transform-class-properties": "^6.24.1",
  }

最佳答案

在 Babel 7 中,所有插件都移到了@babel 范围内。要更新您的 package.json,您需要使用 ^7.0.0 版本相应地重命名所有插件和预设。

您可以找到所有 official plugins here .

如果你打开一个你感兴趣的插件,你会看到它们都被重命名为,例如:@babel/plugin-proposal-class-properties

  • babel-polyfill => @babel/polyfill
  • babel-core => @babel/core
  • babel-plugin-transform-class-properties => @babel/plugin-proposal-class-properties
  • 你明白了。 babel- 现在是 @babel/ 并且一些插件以 proposal 为前缀。

babel-plugin-emotion 当然不是官方插件,所以它保持不变,还有 babel-loader。对于所有其他插件,请确保将名称与上面提供的链接上的新命名进行比较。打开每个插件的文件夹以查看以 @babel/ 开头的新名称。

相同的命名现在适用于 .babelrc 文件(或一般的 babel 配置),我建议你不要使用简写命名,而是在你的 babel 中包含插件和预设的完整包名称配置:

{
  "presets": ["@babel/preset-env", "@babel/preset-react"]
   // ...
}

希望对您有所帮助!干杯。

关于javascript - 从 7 升级到 Babel-loader 8?我需要改变什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106771/

相关文章:

javascript - 我是否应该将 Babel 用于 Node.js 服务器应用程序?为什么?

javascript - 在Vuex的action方法中模拟延迟

javascript - 无法通过 AJAX 发送数组

javascript - angularjs中的确认对话框

javascript - yarn 升级后出现类型错误(ReactJS 项目)

reactjs - 使用babel从node_modules导入模块但失败

javascript - JavaScript 行之间保持什么状态?

javascript - 将修改器封装在 JS 模块内的类中是一种好习惯吗?

node.js - 在 Ubuntu 20.04.2 LTS 上安装 node-gyp 重建失败

node.js - 通过 npm 安装 Angular cli 时出错