当前位置: 首页 > article >正文

【qiankun】使用总结

主应用

主应用使用的技术栈:Angular 18 + Antd

微应用

微应用使用的技术栈:React 18 + Antd

  • 创建子应用
// 安装angular CLI(如果本地已安装可忽略)
npm install -g @angular/cli

// 创建子应用
ng new my-app-name
  • 配置子应用
  1. 安装插件 @angular-builders/custom-webpack
npm i @angular-builders/custom-webpack 
  1. 在根目录增加 custom-webpack.config.js文件
    在这里插入图片描述
const appName = require('./package.json').name;
module.exports = {
  devServer: {
    headers: {
      'Access-Control-Allow-Origin': '*',
    },
  },
  output: {
    library: `${appName}-[name]`,
    libraryTarget: 'umd',
    chunkLoadingGlobal: `webpackJsonp_${appName}`, // webpack 5 需要把 jsonpFunction 替换成 chunkLoadingGlobal
  },
};
  1. 在app文件夹下新增 app.module.ts文件和删除 app.config.ts文件
    在这里插入图片描述
    app.module.ts
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app.routes';
import { CustomerRefundComponent } from './customer-refund/customer-refund.component';


@NgModule({
  declarations: [AppComponent,],
  imports: [BrowserModule,AppRoutingModule, CustomerRefundComponent],
  bootstrap: [AppComponent],
  providers: []
})
export class AppModule {}

  1. 创建新模块,然后在app.routes.ts中配置路由

app.routes.ts

import { RouterModule, Routes } from '@angular/router';
import { CustomerRefundComponent } from './customer-refund/customer-refund.component';
import { NgModule } from '@angular/core';
import { APP_BASE_HREF } from '@angular/common';

export const routes: Routes = [
    {
        path: 'customer-refund/add', component: CustomerRefundComponent // 新模块路由
    },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule],
  providers: [{ provide: APP_BASE_HREF, useValue: (window as any).__POWERED_BY_QIANKUN__ ? '/apps/raise/mycustomer' : '/' }]
})
export class AppRoutingModule {}
  1. 修改 index.html 、app.component.html和app.component.ts的内容
    在这里插入图片描述
  • index.html 给app-root添加唯一标识 mycustomerroot
<app-root id="mycustomerroot"></app-root>
  • app.component.html 删除不需要的内容,保留路由入口
<router-outlet />
  • app.component.ts 注释或者删除 standalone 和 imports属性,selector属性值添加标签id
import { Component } from '@angular/core';
import { RouterOutlet } from '@angular/router';

@Component({
  selector: 'app-root #mycustomerroot', // 添加标签id
  // standalone: true, // 注释
  // imports: [RouterOutlet], //注释
  templateUrl: './app.component.html',
  styleUrl: './app.component.scss'
})
export class AppComponent {
  title = 'MyCustomer';
}

  1. 修改 main.js内容
    在这里插入图片描述
import { AppModule } from './app/app.module';
import { NgModuleRef } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

// 删除或者注释
// bootstrapApplication(AppComponent, appConfig)
//   .catch((err) => console.error(err));


// 以下内容为新增内容
let app: void | NgModuleRef<AppModule>;
async function render(props?: any) {
  app = await platformBrowserDynamic()
    .bootstrapModule(AppModule, { ngZone: (window as any).ngZone })
    .catch((err) => console.error(err));
  console.log(`子应用数据接收`, props);
}

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

export async function bootstrap(props: Object) {
  console.log(props);
}

export async function mount(props: Object) {
  render(props);
}

export async function unmount(props: Object) {
  console.log(props);
  // @ts-ignore
  app.destroy();
}
  1. 修改angular.json文件
    architect > build > builder 和 architect > serve > builder 的值改为我们安装的插件,将我们的打包配置文件加入到 [packageName] > architect > build > options。
    在这里插入图片描述
"architect": {
        "build": {
          "builder": "@angular-builders/custom-webpack:browser",
          "options": {
            "customWebpackConfig": {
              "path": "./custom-webpack.config.js"
            },
           .......
          },
          "main": "src/main.ts", // 参数名改成main 不然会报错找不到入口文件
        },
          .....
        "serve": {
          "builder": "@angular-builders/custom-webpack:dev-server",
       	......
        },
      }
  1. 修改 package.json文件
    在这里插入图片描述
"start": "ng serve --port 4303 --open",
  1. 启动子应用,自测是否运行成功

http://www.kler.cn/a/281721.html

相关文章:

  • 首次实现!在Docker容器中运行macOS项目,自动化下载与Web体验
  • SSD固态硬盘删除文件基本无法恢复
  • 【JavaEE初阶 — 多线程】定时器的应用及模拟实现
  • android 如何获取当前 Activity 的类名和包名
  • 本地文件如何推送到git仓库
  • Ubuntu 22.04 上快速搭建 Samba 文件共享服务器
  • 【C语言从不挂科到高绩点】04-流程控制语句-if
  • 与树懒论文一起展望学术写作的未来:AI与人类创造力的交汇点
  • 【Linux应用编程实战】常见函数应用
  • 程序猿成长之路之数据挖掘篇——Kmeans聚类算法
  • SpringBoot日常:Spring之@PostConstruct解析
  • Windows中Jupyter notebook设置默认目录
  • 全志/RK安卓屏一体机:医疗手推车解决方案,支持鸿蒙国产化
  • 中间件实时监控,运维难题一站解决
  • 【LeetCode】搜索旋转排序数组[python]
  • 【Linux】如何用一条命令终止某个后台进程?
  • AI学习记录 - 模型训练中怎么反向传播以及学习率的影响
  • CSS 的font-synthesis属性与中文体验增强
  • 手机号码归属地查询如何用PHP进行调用
  • zoom 会议 javascript 转录例子
  • 第四十篇-TeslaP40+Ollama+Ollama-WebUI(自编译)
  • Python-MNE-源定位和逆问题01:源估计(SourceEstimate)数据结构
  • Nginx 部署前端 Vue 项目全攻略
  • Spring WebFlux – CVE-2023-34034 – 撰写和概念验证
  • Jmeter下载、配置环境变量
  • 【vue3】wangEditor 5在vue3中的使用