微应用 qiankun 项目搭建

本文提供了一步一步的保姆级教程,详细介绍了如何使用qiankun搭建React主应用和微应用。内容包括遇到的react-scripts版本问题及解决方法,微应用中的eslint报错解决方案,主应用和微应用的创建、配置和注册,以及webpack和rescripts的配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

保姆级搭建qiankun教程 ==> hello world级别搭建,不包含应用间通信之类的

本文经过本人按照qiankun文档==>项目实践书写,主要记录一下在搭建过程中遇到的问题

  • 因为react-scripts 高于版本4所造成的npm i -D @rescripts/cli安装失败

解决办法

将react-scripts版本降到2~4之间

  • 微应用中使用了eslint导致微应用报错问题

解决办法

在package.json文件中进行以下配置

"eslintConfig": { 	...
    ,"globals": {
      "__webpack_public_path__": true
    }   
 },

第一步 ==> 搭建主应用

我是采用的React应用
1.新建React项目

npx create-react-app main_app

2.主应用添加qiankun依赖

$ yarn add qiankun # or npm i qiankun -S

3.主应用中注册微应用

import { registerMicroApps, start } from 'qiankun';

registerMicroApps([
  {
    name: 'react app', // app name registered
    entry: '//localhost:7100',
    container: '#yourContainer',
    activeRule: '/yourActiveRule',
  },
  {
    name: 'vue app',
    entry: { scripts: ['//localhost:7100/main.js'] },
    container: '#yourContainer2',
    activeRule: '/yourActiveRule2',
  },
]);

start();

如果不知道该怎么下手可以像我这样写在App.js里面

import { BrowserRouter as Router, Link } from 'react-router-dom';
import { registerMicroApps, start } from 'qiankun';
import './App.css';

function App() {

  let style = {
    width: '100vw',
    height: '100vh',
  }

  return (
    <div className="App">
      <h1>主应用启动成功</h1>
      <Router>
        <Link to='/app-react'>
          <button>显示React微应用1</button>
        </Link>
        <Link to='/app-react2'>
          <button>显示React微应用2</button>
        </Link>
      </Router>
      <div id='container' style={style}></div>
    </div>
  );
}

registerMicroApps([
  {
    name: 'app_1',
    entry: '//localhost:3001',
    container: '#container',
    activeRule: '/app-react',
  },
  {
    name: 'app_2',
    entry: '//localhost:3002',
    container: '#container',
    activeRule: '/app-react2',
  },
])
start();

export default App;

到这里主应用就构建好了

第二步 ==> 构建微应用

我依然是采用的React项目
1.新建React项目 ==> 不再赘述命令。。
2.在 src 目录新增 public-path.js:

if (window.__POWERED_BY_QIANKUN__) {
  __webpack_public_path__ = window.__INJECTED_PUBLIC_PATH_BY_QIANKUN__;
}

3.入口文件 index.js 修改,为了避免根 id #root 与其他的 DOM 冲突,需要限制查找范围

import './public-path';
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

function render(props) {
  const { container } = props;
  ReactDOM.render(<App />, container ? container.querySelector('#root') : document.querySelector('#root'));
}

if (!window.__POWERED_BY_QIANKUN__) {
  render({});
}

export async function bootstrap() {
  console.log('[react16] react app bootstraped');
}

export async function mount(props) {
  console.log('[react16] props from main framework', props);
  render(props);
}

export async function unmount(props) {
  const { container } = props;
  ReactDOM.unmountComponentAtNode(container ? container.querySelector('#root') : document.querySelector('#root'));
}

4.修改 webpack 配置

安装插件 @rescripts/cli

npm i -D @rescripts/cli

这里载安装依赖的时候可能会报错react-scripts这个依赖版本过高导致安装失败,只需要把这个依赖降低到2-4之间就可以了。

根目录新增 .rescriptsrc.js:

const { name } = require('./package');

module.exports = {
  webpack: (config) => {
    config.output.library = `${name}-[name]`;
    config.output.libraryTarget = 'umd';
    config.output.jsonpFunction = `webpackJsonp_${name}`;
    config.output.globalObject = 'window';

    return config;
  },

  devServer: (_) => {
    const config = _;

    config.headers = {
      'Access-Control-Allow-Origin': '*',
    };
    config.historyApiFallback = true;
    config.hot = false;
    config.watchContentBase = false;
    config.liveReload = false;

    return config;
  },
};

修改 package.json:

   "start": "rescripts start",
   "build": "rescripts build",
   "test": "rescripts test",

如果微应用中使用了eslint还需要进行以下配置

"eslintConfig": {
	...
    ,"globals": {
      "__webpack_public_path__": true
    }
  },

到此就搭建完成了,使用的时候只需要配置相应的路由即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值