Skip to content

React 项目接入指南

本篇文档介绍 React 项目的接入方式。其他版本的接入方式类似,开发者可根据实际版本适配对应代码;

1. 设置跨域支持

1.1 如果项目使用 create-react-app 创建

修改 webpack-dev-server 配置,可以在 config/webpackDevServer.config.js 文件中添加跨域支持:

js
headers: {
  'Access-Control-Allow-Origin': '*',
},

对于其他 React 项目,可以直接在 webpack-dev-server 配置中添加 headers

1.2 如果项目使用 vite 创建

修改vite.config.js 配置

js
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

// https://vite.dev/config/
export default defineConfig({
  plugins: [react()],
  server: {
    port: 8990,
    host: true,
    headers: {
      "Access-Control-Allow-Origin": "*"
    }
  },
})

2. 入口文件改造

安装官方API库freelog-runtime,并进行如下改造

js
// index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
import { freelogApp, initFreelogApp } from "freelog-runtime";

window.mount = () => {
  initFreelogApp();
  ReactDOM.render(<App />, document.getElementById("root"));
};

window.unmount = () => {
  ReactDOM.unmountComponentAtNode(document.getElementById("root"));
};

if (!window.__MICRO_APP_ENVIRONMENT__) {
  window.mount();
}

3. 注册卸载函数

通过在全局注册 window.unmount 函数来处理应用的卸载操作,确保资源被正常释放:

js
// index.js
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

window.unmount = () => {
  ReactDOM.unmountComponentAtNode(document.getElementById("root"));
};

4. 处理未知路由跳转

4.1 配置路由匹配

在应用中,当路由没有匹配到路径时,我们可以跳转到首页。下面是两种常用配置方式:

React Router v6+:

js
<Route path="*" element={<Navigate to="/" replace />} />

React Router v5:

js
<Route path="*" render={() => <Redirect to="/" />} />

完成上述步骤后,React 项目即可在运行时正常渲染。

5. 可选配置

5.1 设置 webpack jsonpFunction

如果子应用在运行时资源加载出现混乱(如渲染失败),可以设置 jsonpFunction 避免资源污染。常见于主应用与子应用都基于 create-react-app 创建的情况。

Webpack 4 配置

js
// webpack.config.js
module.exports = {
  output: {
    jsonpFunction: `webpackJsonp_自定义名称`,
    globalObject: 'window',
  },
};

Webpack 5 配置

js
// webpack.config.js
module.exports = {
  output: {
    chunkLoadingGlobal: 'webpackJsonp_自定义名称',
    globalObject: 'window',
  },
};

5.2 设置 publicPath

当子应用出现静态资源 404(如 JS、CSS、图片)时,可以通过 publicPath 补全资源路径。

步骤 1: 创建 public-path.js 文件

js
// public-path.js
if (window.__MICRO_APP_ENVIRONMENT__) {
  // eslint-disable-next-line
  __webpack_public_path__ = window.__MICRO_APP_PUBLIC_PATH__;
}

步骤 2: 在入口文件引入

js
// index.js
import "./public-path";

总结

通过以上步骤,包括跨域配置、入口文件改造、注册卸载函数、路由捕获等,可将React 项目顺利接入。