美文网首页
create react app webpack V3 to V

create react app webpack V3 to V

作者: 超级码力 | 来源:发表于2021-09-03 10:45 被阅读0次

最近在给一个老项目webpack升级,基本的问题搜索下,给包升升级就搞定了,但是proxy一直有问题,于是仔细排查了下,把解决方法分享下。

在解决一些其他问题,项目能成功跑起来后,根据官方文档,proxy需要使用

http-proxy-middleware这个中间件,所以创建src/setupProxy.js

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function (app) {
  app.use('/api', createProxyMiddleware({ target: 'http://xxx.xxx.com', secure: false, changeOrigin: true, }))
};

重新运行项目,发现并没有代理过去,感觉这个中间件没有注册到webpackDevServer里面,因为项目已经运行了eject,封装的配置全部暴露出来,这个操作主要是将react-scripts里面的配置暴露出来,所以其实在没有eject之前,项目运行跑的配置全在react-scripts里,感觉问题就出在了打包配置上,所以我下载了新的react-scripts代码,对比之前的旧代码,发现了以下proxy相关代码

// webpackDevServer.config.js
module.exports = function (proxy, allowedHost) {
  return {
    ...
    before (app) {
        ...,
        if (fs.existsSync(paths.proxySetup)) {
        // This registers user provided middleware for proxy reasons
        require(paths.proxySetup)(app);
      }
    }
  }
}

因为require的路径在paths文件中所以在paths.js也要加上

module.exports = {
  ...,
  proxySetup: resolveApp('src/setupProxy.js'),
};

然后再重启服务,中间件成功运行,问题解决。

总结:问题主要是因为之前老项目在执行eject的时候react-scripts版本太低,http-proxy-middleware中间件没有注册,所以需要根据新版react-scripts加入相关代码。官网上react-scripts@2.0.0及以上才可以使用http-proxy-middleware,所以说明老项目在执行eject的时候react-scripts的版本是低于2.0.0的。

相关文章

网友评论

      本文标题:create react app webpack V3 to V

      本文链接:https://www.haomeiwen.com/subject/tyzhwltx.html