如何将多个项目集成到一个应用中

467 阅读4分钟

如何将多个项目集成到一个应用中?

vue多页面应用

参考文档:www.cnblogs.com/zhang1f/p/1…

多页面应用项目目录结构

image.png

项目中如何应用

1.项目中public下新增子应用.html,如下,可以直接复制index.html

image.png

2.src下新建pages目录,pages目录下新建子应用的目录,每个目录都有自己独立的views,components,router,store,App.vue和main.js。当然命名可以修改,如果修改的话,记得第三步中vue.config.js中的配置也需要同步修改

image.png

3.需要在vue.config.js中增加pages配置,如下

const { defineConfig } = require('@vue/cli-service')
const glob = require('glob')
// glob 是 webpack 安装时依赖的一个第三方模块,该模块允许你使用 * 等符号,
// 例如 lib/*.js 就是获取 lib 文件夹下的所有 js 后缀名的文件
function getEntry () {
  const pages = {}
  glob.sync('public/*.html').forEach(val => {
    console.log('val',val)
    const url = val.split('/')[1] //bwf.html
    const key = url.split('.')[0]
    pages[key] = {
      entry: `src/pages/${key}/main.js`, //入口js文件
      template: `public/${key}.html`,    //入口.html文件
      filename: `${key}.html`
    }
  })
  return pages
}
const pages = getEntry();
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,//是否关闭代码监测
  css: {
    extract: false,
    sourceMap: true, // 开启 CSS source maps?
    loaderOptions: {
      less: {
        javascriptEnabled: true
      }
    }
  },
  pages,
  //上面的方法其实就是批量配置了如下路径:
  // pages: {
  //   index: {
  //     entry: 'src/pages/index/main.js', 
  //     template: 'public/index.html'
  //   },
  //   project1: {
  //     entry: 'src/pages/project1/main.js',
  //     template: 'public/project1.html'
  //   },
  //   project2: {
  //     entry: 'src/pages/project2/main.js',
  //     template: 'public/project2.html'
  //   }
  // }
})


为什么要配置index目录呢,为如果配置了pages选项,访问根路径时,会默认去找pages中名为index的那一项,然后进入其对应的入口文件,挂载对应的根组件,因此我们配置多页面应用时,pages中最好保留一个index项表示主页,否则可能找不到文件。

ok,此时,我们启动项目后,

image.png

思考:能否配成history路由呢?

微前端

 什么是微前端

微前端是一种多个团队通过独立发布功能的方式来共同构建现代化 web 应用的技术手段及方法策略。

 微前端解决了什么问题

微前端首先解决的,是如何解构巨石应用,从而解决巨石应用随着技术更迭、产品升级、人员流动带来的工程上的问题。解构之后还需要再重组,重组的过程中我们就会碰到各种 隔离性、依赖去重、通信、应用编排 等问题。

微前端架构旨在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用(Frontend Monolith)后,随之而来的应用不可维护的问题。这类问题在企业级 Web 应用中尤其常见。

 常见的微前端架构

阿里 [qiankun] qiankun.umijs.org/zh/guide

 

qiankun的特性
使用qiankun构建微前端的项目实践,参考qiankun.umijs.org/zh/guide/tu…

自己已按照文档实践成功,就不再贴代码了!

qiankun的缺点

qiankun 是目前是社区主流微前端方案。它虽然很完善、流行,但最大的问题就是不支持 Vite。它基于 import-html-entry 解析 HTML 来获取资源,由于 qiankun 是通过 eval来执行这些 js 的内容,而 Vite 中的 script 标签类型是 type="module",里面包含 import/export 等模块代码, 所以会报错:不允许在非 type="module" 的 script 里面使用 import。

 

京东micro-app

zeroing.jd.com/micro-app/d…

micro-app并没有沿袭single-spa的思路,而是借鉴了WebComponent的思想,通过CustomElement结合自定义的ShadowDom,将微前端封装成一个类WebComponent组件,从而实现微前端的组件化渲染。并且由于自定义ShadowDom的隔离特性,micro-app不需要像single-spa和qiankun一样要求子应用修改渲染逻辑并暴露出方法,也不需要修改webpack配置,是目前市面上接入微前端成本最低的方案。

项目实践,参考zeroing.jd.com/micro-app/d…

已实践成功,先不贴代码了!