reactjs - 通过代理在 dev 上提供 React 项目

标签 reactjs proxy local-storage create-react-app

我将我的 React 应用程序分成了 3 个不同的项目,对所有项目使用 CRA、auth、X 和 Y。用户首先被发送到 auth,然后我根据一些信息将他重定向到 X 或 Y。

它在生产环境中完美运行(因为它们在同一域上运行),但在开发环境中,X和Y无法对用户进行身份验证,因为它们在不同端口(不同域)上运行,本地存储中的数据不共享auth、X 和 Y 之间。

我试图找到一种使用反向代理(http-proxy)在同一域上托管React开发服务器的方法,但也失败了,因为服务找不到assets/static文件夹,导致404. 还尝试了 http-proxy-middleware,正如 CRA 文档页面上推荐的那样,但失败了。有没有我没有看到的更简单的方法?

编辑:发现了一些新东西,但也失败了。使用react-rewired覆盖CRA脚本,在DEV上使用PUBLIC_PATH,但现在我的bundle.js返回一个index.html文件。

以下代码确实重定向到相应的react项目,但资源被请求到错误的路径。

const apiProxy = httpProxy.createProxyServer();


app.all("/login/*", function(req, res) {
    console.log('redirecting to Login');
    apiProxy.web(req, res, {target: servers.login});
});

app.all("/implementacao/*", function(req, res) {
    console.log('redirecting to Implementation');
    apiProxy.web(req, res, {target: servers.implementation});
});

所以我使用react-rewired来更改公共(public)路径

const {
  override,
} = require('customize-cra');

module.exports = {
  webpack: override(
      (config) => {
        config.output.publicPath = '/login/';
        return config;
      },
  ),

  jest: config => {
    return config;
  },

  devServer: configFunction => (proxy, allowedHost) => {
    return configFunction(proxy, allowedHost);
  },

  paths: (paths, env) => {
    return paths;
  }
};

现在, Assets 请求已正确发送到/login/,但开发服务器始终不会返回 index.html 文件。

最佳答案

即使使用react-app-rewired来覆盖配置并在开发上使用publicPath, Assets 也不会从publicPath提供服务。

已经有一个 pull request在 CRA 上在开发模式下使用 PUBLIC_URL。

关于reactjs - 通过代理在 dev 上提供 React 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57617225/

相关文章:

javascript - 在 React 中调用 setState 后,是否有硬性规则来避免访问/更改状态时出现异步错误?

javascript - 如何在React js中进行迭代并分成两组?

proxy - 如何在 Python 中关闭 ZeroMQ zmq.proxy?

javascript - 多页面网站localstorage获取和设置

reactjs - Apollo客户端的片段组合: convention and boilerplate

javascript - 通过 props 传递的函数显示为未定义

Java代理连接到postgres

java - 带有 XMLEncoder/Decoder 的序列化代理

angularjs - 使用 Angularjs 加密客户端本地存储数据

javascript - 如何在页面加载时从 localStorage 加载 jPlayer 播放列表?