@webdocker/core
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

webdocker/core

微前端核心库

安装

npm install @webdocker/core 

API

  • [loadApp]
  • [prefetchApps]

loadApp(app,config,lifeCycles)

参数
函数参数 type description
app LoadableApp 必填,微应用配置
config FrameworkConfiguration 选填,框架配置
lifeCycles FrameworkLifecycles 选填, 生命周期函数Hooks
返回
  • Promise<{ name: string; mount: () => Promise<void>; unmount: () => Promise<void>;}>
类型
  • LoadableApp
字段 type description
name string 必填,微应用名称
entry '{ styles:string[],scripts:string[]}' 必填,微应用资源路径
container string HTMLElement
initialPath string 选填,微应用url
  • FrameworkConfiguration
字段 type description
sandbox boolean { iframe:boolean}
dynamicPatch boolean 选填,微应用是否需要开启懒加载
开始使用

在使用vue框架的宿主应用加载微应用应用

<template>
  <div id="lightyear-container"></div>
</template>

<script>
import webDocker from '@webdocker/core'

export default  {
    name:'LightyearDymanic',
    data(){
        return {app:null}
    },
   async mounted(){
       this.app =await webDocker.loadApp({name:'LightYear',container:'#lightyear-container',entry:{
            scripts:[`microapp js url`],
            styles:[ `microapp css url`]
        }, initialPath: '/test'},{ sandbox: { iframe: true }, dynamicPatch: true })
       this.app.mount()
    },
    beforeDestroy(){
      if(this.app) {
        this.app.unmount()
      }
     
    }
}
</script>

prefetchApps(appConfig[])

参数
函数参数 type description
appConfig {name:string,entry:{ styles?: string[] scripts?:string[];} 必填,微应用配置

开始使用

在宿主应用中预加载微应用

import { prefetchApps } from '@webdocker/core'

prefetchApps([
  {
    name: 'I18nMicroApp',
    entry: {
      scripts: [
        `js url`,
      ],
      styles: [`css url`]
    }
  }
])

微应用要求

微应用应该以umd的方式导出生命周期对象。

import React from 'react'
import { createRoot } from 'react-dom/client'
import { unmountComponentAtNode } from 'react-dom'
import { ConfigProvider } from 'antd'
import zhCN from 'antd/lib/locale/zh_CN'
import addModalWrapper from '@/components/hoc/addModalWrapper'
import Layout from '@/components/layout'


let rootElem = document.querySelector('#root')

function render(props) {
  const { container = rootElem } = props
  rootElem = container
  const root = createRoot(rootElem)
  import(
    /* webpackChunkName: "[constant]" */
    '@/components/layout/index'
  ).then(res => {
    const App = addModalWrapper(res.default)
    root.render(
      <ConfigProvider locale={zhCN}>
        <App />
      </ConfigProvider>,
    )
  })
}

const microExportInfo = {
  mount: render,
  unmount() {
    unmountComponentAtNode(rootElem)
  },
}

if (!window.__POWERED_BY_WEBDOCKER__) {
  render({})
}

export default microExportInfo

微应用应该打包成UMD模块,添加webpack 如下配置:

module.exports = {
  output: {
    library: 'micro-app-name',
    libraryTarget: 'umd',
  },
};

Readme

Keywords

none

Package Sidebar

Install

npm i @webdocker/core

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

103 kB

Total Files

61

Last publish

Collaborators

  • xujun_npm