javascript - 如何为单独的 webpack 服务器/客户端配置正确覆盖 babel@7 插件

标签 javascript webpack babeljs babel-loader

我正在使用单个 .babelrc配置并在 webpack.config.client.js 中使用它和 webpack.config.server.js使用 babel-loader。

.babelrc:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "debug": false,
        "modules": false,
        "loose": true
      }
    ],
    "@babel/react"
  ],
  "env": {
    "development": {
      "plugins": ["react-hot-loader/babel"]
    },
    "production": {}
  }
}

问题是,react-hot-loader 发现它进入了已编译的服务器代码。 我做了一些研究,发现 babel 7 允许 configure overrides对于这种情况。

我尝试实现它,但“env”部分从未被覆盖:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "debug": false,
        "modules": false,
        "loose": true
      }
    ],
    "@babel/react"
  ],
  "env": {
    "development": {
      "plugins": ["react-hot-loader/babel"]
    },
    "production": {}
  },
  "overrides": {
    "include": "./src/server/index.js", // ?
    "env": {
      "development": {
        "plugins": [] 
      }
    }
  }
}

感谢任何帮助

最佳答案

Babel 对您的客户端/服务器差异一无所知。您的 "include": "./src/server/index.js", 检查会影响该单个文件,但不会影响您的概念服务器包。

实际上,有很多方法可以做到这一点,但我只列出几个开始。

一个是使用 env 并且有 4 个而不是 2 个(production-client, production-server, development-客户端开发服务器)。那么你可以做

"env": {
  "development-client": {
    "plugins": ["react-hot-loader/babel"]
  },
}

或者,您可以设置另一个环境变量,例如

cross-env NODE_ENV=development BUNDLE_NAME=server webpack --config webpack.config.server.js

并将您的配置重命名为 .babelrc.js 文件,然后执行

module.exports = {
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "debug": false,
        "modules": false,
        "loose": true
      }
    ],
    "@babel/react"
  ],
  "env": {
    "development": {
      "plugins": 
        process.env.BUNDLE_NAME === "server" 
          ? [] 
          : ["react-hot-loader/babel"]
    },
    "production": {}
  },
};

关于javascript - 如何为单独的 webpack 服务器/客户端配置正确覆盖 babel@7 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52129579/

相关文章:

javascript - Jquery:读取表行并根据条件向行添加效果

javascript - 在 Javascript 中解析 XML 标记元素

javascript - babel-preset-es2015 和 babel-preset-env 有什么区别?

node.js - 错误类型错误 : Cannot read property 'style-resources-loader' of undefined

react-native - 应用程序发布崩溃 t 不是一个函数

javascript - openpgp.js:从私钥文本字符串生成公钥文本字符串

javascript - 为什么 `Array.length` 、 `Function.length` 、 `String.length` 等返回 1?

javascript - Webpack 类没有从构造函数到类的方法共享 this

angularjs - webpack 的 angular-translate-loader 如何工作?

javascript - 扩展语法对于对象数组不能按预期工作