0.0.10 • Published 1 year ago

@flyriselink/pai-micro-app v0.0.10

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

@flyriselink/pai-micro-app

介绍

@flyriselink/pai-micro-app是基于@micro-zoe/micro-app@0.8.x,针对flyriselink项目实践的封装与增强,主要增强了子应用的认证授权、启动状态、标题传递、样式的计算与传递。同时,api明确划分了基座(base)、子应用(child),避免使用时的混淆,不影响原有的api使用。

依赖

  • @micro-zoe/micro-app是京东零售推出的一款微前端框架,它基于类WebComponent进行渲染,从组件化的思维实现微前端,旨在降低上手难度、提升工作效率。它是目前接入微前端成本最低的框架,并且提供了JS沙箱、样式隔离、元素隔离、预加载、虚拟路由系统、插件系统、数据通信等一系列完善的功能。

  • @flyriselink/vue-router是flyriselink基于vue-router@2.x,针对在二级目录下使用@micro-zoe/micro-app的路由支持。

  • @flyriselink/pai-auth-api是flyriselink基于认证中心的相关api封装。

命令

安装

npm install

启动示例

# 启动基座 -> http://localhost:91/main
npm run main:dev

# 启动子应用 -> http://localhost:92/child/apps/a
npm run child:dev

部署示例

# 构建基座 -> ./demo-main
npm run main:demo

# 构建子应用 -> ./demo-child
npm run child:demo

nginx.conf 示例

server {
    listen 91;
    server_name  localhost;
    index index.php index.html index.htm index.jsp;

    location /main {
        alias   X:/xxxxx/pai-micro-app-ui/demo-main;
        try_files $uri $uri/=403 /main/index.html;
    }

    # 代理前缀为“/xxx-api”的请求
    location ~* ^\/[^\/]+-api {
        rewrite ^\/([^\/]+-api)\/(.*) http://39.108.55.230:31000/$1/$2;
    }
}

server {
    listen 92;
    server_name localhost;
    add_header Access-Control-Allow-Origin *;

    location /child {
        alias   X:/xxxxx/pai-micro-app-ui/demo-child;
        try_files $uri $uri/=403 /child/index.html;
    }
}

构建库文件

# 构建库文件 -> ./dist
npm run prod

# 分析库文件
npm run an

使用说明

基座:初始化

/* 可以参考 src\website\entry\main.js */

import Vue from 'vue'

// 初始化路由
import VueRouter from '@flyriselink/vue-router'
Vue.use(VueRouter)

// 初始化微应用
import PaiMicroApp from '@flyriselink/pai-micro-app'
Vue.use(PaiMicroApp, /* { microApp: {} } */)
// microApp相当于microApp.start(options)中的options
// 唯一差别是options.tagName默认为"micro-app-pai"(原始tagName为"micro-app")

基座:组件使用

p-micro-app 保留了原 micro-app 的api,增加了以pai-开头的api。

<!-- 为了代码整洁,示例把原有api用v-bind、v-on定义 -->
<!-- 具体使用的时候,根据个人习惯定义即可 -->
<p-micro-app
    v-bind="{ name: microAppName, url }"
    v-on="{ created: appCreated, mounted: appMounted, datachange: appDataChange }"
    :pai-top="top"
    :pai-bottom="bottom"
    :pai-header-height="headerHeight"
    :pai-footer-height="footerHeight"
    :pai-title="title"
    :pai-auth="auth"
    @pai-launched="paiLaunched">
</p-micro-app>
{
    data() {
        // 相关api,文档后面会详细说明
        return {
            microAppName: 'child', // 子应用:名称
            url: 'http://localhost:92/xxxx', // 子应用:地址
            //
            top: 53, // 子应用:内容顶端的距离(内置累加计算),将影响相关CSS变量
            bottom: 53, // 子应用:内容底端的距离(内置累加计算),将影响相关CSS变量
            headerHeight: 53, // 子应用:顶栏高度,将影响相关CSS变量
            footerHeight: 53, // 子应用:底栏高度,将影响相关CSS变量
            //
            title: '基座标题', // 基座页面标题,子应用可以通过api同步获取
            // @flyriselink/pai-auth-api的实例对象,或者满足@flyriselink/pai-auth-api的AuthApiInterface定义的对象
            auth: {}, // 用于支持子应用调用pai获得认证中心相关信息
        }
    },
    methods: {
        appCreated() {
            console.log('appCreated')
        },
        appMounted() {
            console.log('appMounted')
        },
        appDataChange() {
            console.log('appDataChange')
        },
        // 由子应用调用api,通知基座页面已经装备好。
        // 主要可以用于防止:子应用路由未处理完毕,此时操作基座路由,会产生路由冲突(基座、子应用路由实例目前是互相独立的存在)。
        paiLaunched() {
            console.log('paiLaunched')
        }
    },
}

子应用:CSS变量继承

使用CSS变量,记得定义默认值,以免样式出错。例如,“var(--pai-micro-app-top-total, 0px)”

  • --pai-micro-app-top - 子应用:内容顶端的距离
  • --pai-micro-app-bottom - 应用:内容底端的距离
  • --pai-micro-app-top-total - 子应用:内容顶端的距离(嵌套累加)
  • --pai-micro-app-bottom-total - 子应用:内容底端的距离(嵌套累加)
  • --pai-micro-app-height - 子应用:最佳(满屏)内容高度(嵌套累加),相当于“calc(100vh - var(--pai-micro-app-top-total, 0px) - var(--pai-micro-app-bottom-total, 0px))”
  • --pai-micro-app-header-height - 子应用:顶栏高度,主要用于对全局交互(例如提示框)样式调整
  • --pai-micro-app-footer-height - 子应用:底栏高度,主要用于对全局交互(例如返回顶部按钮)样式调整

基座:API

// 若使用过Vue.use(PaiMicroApp),PaiMicroApp将同时会挂载到Vue.prototype
// 则组件内可以用过this.$paiMicroApp访问PaiMicroApp
import PaiMicroApp from '@flyriselink/pai-micro-app'

// PaiMicroApp.base.microApp.xxx 相当于 
// microApp.xxx(import microApp from '@micro-zoe/micro-app')

子应用:API

// 若使用过Vue.use(PaiMicroApp),PaiMicroApp将同时会挂载到Vue.prototype
// 则组件内可以用过this.$paiMicroApp访问PaiMicroApp
import PaiMicroApp from '@flyriselink/pai-micro-app'

// PaiMicroApp.child.microApp.xxx 相当于 
// window.microApp.xxx

// 在上述基础上增加下面这些api:
// 通知基座页面已经装备好,主要可以用于防止:子应用路由未处理完毕,此时操作基座路由,会产生路由冲突(基座、子应用路由实例目前是互相独立的存在)。
PaiMicroApp.child.launched()
// 获取基座页面标题
PaiMicroApp.child.getTitle()
// 代理@flyriselink/pai-auth-api实例对象的api,主要用于子应用没有使用@flyriselink/pai-auth-api的情况。
// 若子应用初始化了@flyriselink/pai-auth-api,直接只用其实例对象api即可,无需使用下面的api。
PaiMicroApp.child.login()
PaiMicroApp.child.logout()
PaiMicroApp.child.getToken()
PaiMicroApp.child.getUserInfo()
// 基座定义子应用的appName
PaiMicroApp.child.appName

基础API

// 若使用过Vue.use(PaiMicroApp),PaiMicroApp将同时会挂载到Vue.prototype
// 则组件内可以用过this.$paiMicroApp访问PaiMicroApp
import PaiMicroApp from '@flyriselink/pai-micro-app'

// 当前是否运行在微前端的子应用
// 相当于返回了window.__MICRO_APP_ENVIRONMENT__的值
PaiMicroApp.isMicro()

// 相当于返回了window.__MICRO_APP_BASE_ROUTE__的值
PaiMicroApp.baseroute()

开发日志

v0.0.9

  • 修复异常

v0.0.8

  • 修复异常
  • 路由同步(改为单向:子应用同步基座)

v0.0.7

  • 调整install的配置项
  • 实现路由同步
  • 增加Api:baseroute

开发计划

  • 路由阻止(待定)
0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago