前提

1. 同一个技术,都是react,或者都是vue。

2. 会webpack的dll配置。

思考

发现各个应用之间,第三方的包都是很多的,假如我们在主应用把这些包抽取出来,后面子应用引入,可以极大地减少子应用包的大小。

解决方法

一开始想使用externals来解决这问题,但是发现有一部分插件是不支持umd格式的,所以废弃了这个方案。

后面想到了webpack的dll打包,可以打包抽取不支持umd格式的插件,完美的解决了问题。

开始配置

直接上代码

const path = require('path');
const webpack = require('webpack');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin');// rc-系列插件
const rcs = ['rc-table', 'rc-select', 'rc-switch', 'rc-picker', 'rc-trigger', 'rc-tree-select', 'rc-menu', 'rc-field-form', 'rc-animate', 'rc-input-number', 'rc-tooltip', 'rc-virtual-list', 'rc-dialog', 'rc-pagination', 'rc-dropdown', 'rc-checkbox', 'rc-resize-observer']
module.exports = {mode: 'production',entry: {react: ['react', 'react-dom', 'react-router-dom'],rc: rcs,echarts: ['echarts'],xlsx: ['xlsx'],vendor: ['axios', 'moment']},output: {filename: 'dll.[name].js',path: path.resolve(__dirname, '../dll'),// 全局变量名称library: '[name]_library'},plugins: [new CleanWebpackPlugin({cleanOnceBeforeBuildPatterns: [path.resolve(__dirname, '../dll/**/*')]}),new webpack.DllPlugin({// 和library 一致,输出的manifest.json中的name值name: '[name]_library',// path 指定manifest.json文件的输出路径path: path.resolve(__dirname, '../dll/[name]-manifest.json'),}),new BundleAnalyzerPlugin(),]
}

这里抽取了react+react-dom+react-router-dom为一个js,抽取了rc系列为一个js,抽取了echarts为一个js,抽取了xlsx为一个js,最后抽取axios+moment为一个js。
rc系列:antd的实现都是基于这些插件的。
xlsx:是一个读取exlcel表格数据的插件。
echarts:是百度的canvas插件。

出现的问题

1. 抽取了出来的rc.js中存在了react+react-dom+react-router-dom的代码,所以我们引入的时候就可以忽略这个react.js。
2. 引入的时候需要注意顺序,我是引入按照rc,xlsx,echarts,vendor顺序来的。记得rc需要放在第一步。(这个跟先引入react想法一致。)

主应用配置

  // 插件plugins: [// 导入'...['vendor', 'echarts', 'xlsx', 'rc'].map(item => new Webpack.DllReferencePlugin({manifest: path.join(__dirname, `../dll/${item}-manifest.json`)})),...['vendor', 'echarts', 'xlsx', 'rc'].map(item => new AddAssetHtmlWebpackPlugin({filepath: path.resolve(__dirname, `../dll/dll.${item}.js`),outputPath: 'static/dll',publicPath: `${pathName}/static/dll`,hash: true}))].filter(Boolean),

dll的基本配置,注意按照顺序即可。(plugins是从后往前插入的,类似于递归,所以我们需要逆序)

子应用配置

// 插件plugins: [// 导入...['vendor', 'echarts', 'xlsx', 'rc'].map(item => new Webpack.DllReferencePlugin({manifest: path.join(__dirname, `../../cstmr-paltform-base/dll/${item}-manifest.json`)}))].filter(Boolean),

这里其实只需要使用DllReferencePlugin就可以了,告诉webpack来源,并且忽略打包即可。(记住这里忽略了dll.react.js)
这里发现其实引用文件的路径是可以超出本项目的吗,这里就是跨项目了。

打包

打包完即可上线

乾坤微前端优化(一)相关推荐

  1. 为什么要用微前端?如何使用乾坤微前端?

    目录 1.效果图: 2.为什么要用: 2.1.项目越来越大,不好维护时 2.2.如果你不忙,想使用最新的技术又不想影响开发. 2.3.比如好不容易找到一个轮子,发现人家用的技术栈和自己的项目不一样时 ...

  2. 乾坤 微前端_微前端架构初探以及我的前端技术盘点

    前言 最近几年微前端一直是前端界的热门议题, 它类似于微服务架构, 主要面向于浏览器端,能将一个复杂而庞大的单体应用拆分为多个功能模块清晰且独立的子应用,且共同服于务同一个主应用.各个子应用可以独立运 ...

  3. 乾坤 微前端_拥抱云时代的前端开发架构——微前端

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

  4. 乾坤 微前端_最全汇总之微前端知识和实战(EMP技术方案)

    我们团队在早早聊的B站直播间分享了EMP微前端---团队半年以来的技术果实.分享的内容全在这里,会讲述微前端的由来,解决的问题,以及EMP微前端方案的不同之处,更有四个实战项目的总结,欢迎大家一起探讨 ...

  5. 经验之谈-关于实际项目微前端优化

    点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 场景 一个在某某行业为运营商提供服务的科技公司 首先会开发一个关于机器各种功能的运营系统(机器中心) next,要为供应商提供数据分析的系 ...

  6. 乾坤 微前端_前端优秀资源整理(持续更新~)

    入门必备 developer-roadmap: 超级全的2020年前端学习路线 freeCodeCamp: 一步一步在线引导学习, 有很多开源的课程和代码 职场必备 front-end-intervi ...

  7. 使用乾坤微前端nginx和服务器部署

    nginx文件nginx.conf配置文件 # For more information on configuration, see: # * Official English Documentati ...

  8. vue项目集成乾坤(qiankun)微前端

    vue项目集成qiankun微前端 集成乾坤微前端主应用: 1.安装 2.main.js中进行配置 3.配置路由 4.将主应用路由模式设置为history模式 子应用中配置(子应用无需安装乾坤) 1. ...

  9. 微前端框架乾坤配置记录

    主应用 1. 路由包装为history模式 // src/main.js import routes from './routes'; const router = new VueRouter({mo ...

最新文章

  1. oracle归档模式教程,Oracle从归档模式变成非归档模式详细步骤
  2. Java中的ReentrantLock和synchronized两种锁定机制的对比
  3. springmvc工作流程详解_软装设计师工作流程详解
  4. 深度学习之循环神经网络(7)梯度裁剪
  5. 分数的大小比较优秀教案_人教版小学数学五年级下册异分母分数加、减法公开课优质课课件教案视频...
  6. rman report list crosscheck delete -rman常用命令。
  7. cad卸载_CAD卸载清理工具(一键清理)
  8. NumPy 简单应用
  9. 使用应用心理学帮助软件工程师
  10. java代码实现购物车小程序_微信小程序实现购物车代码实例详解
  11. 这12个GIS软件一个比一个好用
  12. 如何用matlab画圆
  13. 货币代码php,在PHP中获取货币符号
  14. 职工考勤管理信息系统数据库课设_数据库课程设计职工考勤管理信息系统
  15. 用户研究中的定性研究、定量研究
  16. 能够创建时间循环并飞檐走壁的 VR 游戏 TRANSPOSE正式上线
  17. 跨时钟域传输和Verilog代码
  18. 安全攻访策略:PDR模型
  19. 8c创建gbase用户免密登录
  20. 英雄联盟手游登录注册地与服务器不匹配,《lol手游》登录失败解决教程 全错误代码异常解决方法...

热门文章

  1. Virtuoso工具基础讲解
  2. 精洗鞋奢侈品多门店预约到店洗鞋小程序洗衣优惠券支持积分
  3. Go语言入门-新手村
  4. Alpine Linux 时间同步
  5. Educoder:jQuery遍历
  6. 如何通过pycharm使用pandas库
  7. 哪些手机看图软件可以查看CAD图纸?
  8. Java面试之画出HashMap结构图,并说说HashMap和HashTable的区别
  9. 怎样定义函数指针数组
  10. 市值被小鹏超越/销量多月下滑,自主“一哥”的转型压力