javascript - 强制 Webpack 在 react-app bundle 中使用 ES6 语法

标签 javascript reactjs webpack babeljs babel-polyfill

<分区>

我的目标是在我构建的整个 react-app 中使用 ES6 语法(或最新的语法)。

我已经通过省略一些 babel 依赖项(例如 @babel/preset-env )设法避免在我自己的代码中使用 polyfill。

不过,我的捆绑文件在很大程度上保留了 ES5 语法。我假设 babel(或 webpack?)是 polyfilling react 和 webpack 的 runtimeES5 以实现浏览器兼容性。

另一种选择可能是 webpack 的运行时 native 应该使用 ES5 并且不能转换为 ES6(当前持续的可能性,请参阅答案)。

这是我的package.json:

  "main": "index.js",
  "scripts": {
    "start": "webpack serve --mode=development --open",
    "build": "webpack --mode=production"
  },
  "dependencies": {
    "react": "^17.0.2",
    "react-dom": "^17.0.2"
  },
  "devDependencies": {
    "@babel/preset-react": "^7.16.5",
    "babel-loader": "^8.2.3",
    "css-loader": "^6.5.1",
    "html-webpack-plugin": "^5.5.0",
    "style-loader": "^3.3.1",
    "webpack": "^5.65.0",
    "webpack-cli": "^4.9.1",
    "webpack-dev-server": "^4.7.2"
  },
  "babel": {
    "presets": [ "@babel/preset-react" ]
  }

这是我的webpack.config.js:

const path = require("path");
const HtmlWebPackPlugin = require("html-webpack-plugin");

module.exports = {
  output: {
    path: path.resolve(__dirname, "build"),
    filename: "[name].js"
  },
  resolve: {
    modules: [ path.join(__dirname, "src"), "node_modules" ],
    alias: {
      react: path.join(__dirname, "node_modules", "react")
    }
  },
  module: {
    rules: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: "babel-loader"
      },
      {
        test: /\.css$/,
        use: [
          { loader: "style-loader" },
          { loader: "css-loader" }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({ template: "./src/index.html" })
  ],
};

我没有使用 create-react-app 而是我自己的样板和配置。

我的index.jsapp.jsindex.htmlstyles.css都进了./src 文件夹。

谢谢你的帮助

最佳答案

如果你没有使用 @babel/preset-env 那么默认情况下你的代码不应该改变。只有 React 应该被转译为 es5(主要是 JSX 转译)。您可能提到了 webpack 添加的样板代码,它可以在 es5 中。

您可以在您的 webpack 配置中使用 optimization: { minimize: false } 来更好地查看您的包。

webpack 的这些样板称为 runtime .

没有办法强制 webpack 使用一组功能,但你可以强制它使用一组功能抛出 output.environment.* .例如,对于下面的代码,您表示不要在运行时代码中使用 const

...

output: {
    environment: {
        const: false
    }
}
...

关于javascript - 强制 Webpack 在 react-app bundle 中使用 ES6 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70541328/

相关文章:

javascript - 应用程序使用什么 API 来访问(发送金额)比特币钱包

javascript - Laravel 电子邮件与域名验证两次

javascript - 如何使用 JS 和 Lodash 重复一个元素 n 次

reactjs - 如何将 Material UI v5 连接到 Next JS v12?

webpack提供 "Invalid regular expression"错误

javascript - 如何使用 Jquery 搜索带有 javascript 运算符符号的表单列?

JavaScript 绝对定位在 IE7 中不起作用

node.js - 发送流作为 axios 请求的响应

javascript - webpack 找不到 Json 文件

vue.js - 错误 : "You may need an additional loader to handle the result of these loaders."