无界官方相关链接:

  1. 官网文档
  2. github地址
  3. 官网demo

一、安装(主应用)

在主应用中安装无界,我主使用的vue2项目,所以安装的是wujie-vue2版本的,其他前端框架(react)可以去无界文档找对应的版本安装

  1. npm install wujie-vue2 --save // 注意这里是在主应用中安装

二、使用(主应用)

在项目入口文件中(main.js)引入无界

  1. import WujieVue from 'wujie-vue2'
  2. // 这个文件主要是配置一些子应用的测试环境地址
  3. import hostMap from './hostMap.js'
  4. // 这里是有多个子应用的时候,可以把子应用的地址配置放在一个文件,导入进来就行了
  5. import { ENV_DOMAIN_MT_MAP } from '@/constants/sub-app.js'
  6. const { setupApp, preloadApp } = WujieVue // 使用到无界API
  7. Vue.use(WujieVue)
  8. // 创建应用,主要是设置配置,preloadApp、startApp的配置基于这个配置做覆盖
  9. setupApp({
  10. name: '子应用名称', // 这里这个名称要和展示子应用页面设置的名称一样哦!!!!
  11. url: hostMap(ENV_DOMAIN_MT_MAP[process.env.VUE_APP_API_ENV]), // 子应用的域名链接
  12. })
  13. preloadApp({
  14. name: '子应用名称', // 这里这个名称要和展示子应用页面设置的名称一样哦!!!!
  15. url: hostMap(ENV_DOMAIN_MT_MAP[process.env.VUE_APP_API_ENV]), // 子应用的域名链接
  16. })

hostMap.js文件

  1. // 这里就不写公司的应用域名了,用百度做例子,到时候把自己子应用的域名写上就行了
  2. const map = {
  3. // 子应用的测试环境
  4. '//dev-baidu.baidu.cn/': '//dev-baidu.baidu.cn/',
  5. // 子应用的预发环境
  6. '//staging-baidu.baidu.cn/': '//staging-baidu.baidu.cn/',
  7. // 子应用的生产环境
  8. '//baidu.baidu.cn/': '//baidu.baidu.cn/',
  9. }
  10. export default function hostMap(host) {
  11. if (process.env.NODE_ENV === 'production') return map[host]
  12. return host
  13. }

constants/sub-app.js文件

  1. // 子应该环境域名,这里就不写公司的应用域名了,用百度做例子,到时候把自己子应用的域名写上就行了
  2. export const ENV_DOMAIN_MT_MAP = {
  3. development: '//子应用开发测试域名/', // 开发/测试环境 例如:dev.baidu.com
  4. staging: '//子应用预发环境域名/', // 预发环境 例如:staging.baidu.com
  5. production: '/子应用生产环境域名/' // 生产环境 例如:baidu.com
  6. }

新建一个展示子应用的页面(这里是真正使用无界的时候了)

instant-sticker/instant-sticker.vue

  1. <!-- 展示子应用的页面 -->
  2. <style lang="scss" scoped>
  3. #instant {
  4. height: calc(100vh - 81px);
  5. }
  6. </style>
  7. <template>
  8. <div style="width: 100%; height: 100%;">
  9. <WujieVue
  10. width="100%"
  11. height="100%"
  12. name="子应用名称,这里这个名称要和main.js中设置的一样哦!!!"
  13. :url="mtUrl"
  14. :sync="true"
  15. />
  16. </div>
  17. </template>
  18. <script>
  19. import user from '@/utils/user' // 这个可以忽略,是获取用户信息的
  20. import hostMap from '@/hostMap'
  21. import { ENV_DOMAIN_MT_MAP } from '@/constants/sub-app.js'
  22. export default {
  23. name: 'instant-sticker',
  24. data() {
  25. return {
  26. mtUrl: '', // 子应用链接
  27. token: '', // 子应用需要的参数
  28. }
  29. },
  30. mounted() {
  31. this.token = user.getToken()
  32. this.mtUrl = `${hostMap(ENV_DOMAIN_MT_MAP[process.env.VUE_APP_API_ENV])}directBank?token=${this.token}`
  33. }
  34. }
  35. </script>

三、子应用中的配置

在子应用的配置其实很简单的,只需要在子应用main.js中稍作配置就行

main.js

  1. // 给vue实例挂载 window.__POWERED_BY_WUJIE__,用来区分项目是否已微前端的方式放在主应用中使用
  2. Vue.prototype.$wujie = window.__POWERED_BY_WUJIE__ ? true : false
  3. // 子应用中使用微前端框架 - 无界 走这里
  4. if (window.__POWERED_BY_WUJIE__) {
  5. let instance
  6. window.__WUJIE_MOUNT = () => {
  7. instance = new Vue({ router, store, render: (h) => h(App) }).$mount('#app')
  8. }
  9. window.__WUJIE_UNMOUNT = () => {
  10. instance.$destroy()
  11. }
  12. } else {
  13. // 子应用没有以微前端的方式,使用走这里
  14. new Vue({
  15. router,
  16. store,
  17. render: (h) => h(App)
  18. }).$mount('#app')
  19. }