首页 > 其他分享 >记录一次关于vite打包

记录一次关于vite打包

时间:2024-09-05 22:24:40浏览次数:9  
标签:记录 -- 入口 js vite config 打包

问题:

vue工程存在两个入口A,B,A不需要B中的资源,但是打包都打包到common.js中了,导致common.js文件很大,A入口首次加载资源很慢。

最后解决办法:

A入口和B入口分开打包,搞两个vite.config.ts。在package.json中

"build": "npm-run-all --parallel buildIndex buildLightCCBar  --continue-on-error",  "buildIndex": "vite build --base=/service-cloud/aicc-web -l error --config ./vite.config.ts",  "buildLightCCBar": "vite build --base=/service-cloud/aicc-web -l error --config ./vite.config.lightccbar.ts"   问题解决过程

1.首页加载慢,common.js文件大,有20M,压缩后也有8M,里面包含轻量级接续条不需要的其他模块的国际化,想要将这部分内容打包时给搞出去,找到一个方法
build: {
  rollupOptions: {
    output: {
      manualChunks: (id) => {
        if (id.includes('src/lang/')) {
          return 'aicclang';
        }
      };
    }
  }
}

然后发现就算给搞出去了,A入口也会请求搞出去的这部分js,首次加载资源还是不会少。
2.看到一个按需加载的思路,国际化资源按需加载 ,如:

import { createI18n } from 'vue-i18n';
export function getLanguage() {   return cookieUtils.getCookie('u-locale'); }
const getMessages = async () => {   const [ccmanagement, agentconsole, ccdesktop, lightccbar] = await Promise.all([     import(`@/views/ccmanagement/lang/${language}.js`),     import(`@/views/agentconsole/lang/agentconsole_${language}.js`),   ]);   const messages = {     [language]: {       ...ccmanagement.default,       ...agentconsole.default,     }   };
  return messages; };
let messages = {}; let language = getLanguage(); let i18n = createI18n({   locale: language,   globalInjection: true });
export const createI18nInstance = async () => {   messages = await getMessages();   i18n.global.setLocaleMessage(language, messages[language]);   return i18n; }; createI18nInstance(); export default i18n;


可以根据是否是A入口是否是B入口,加载不同的国际化资源,还可以根据是什么语言,加载那一种语言的国际化。如语言选择的中文就只加载zh_CN结尾的资源,英文,西班牙语等的国际化资源都不加载。这样做了之后B入口发现一个问题

有些直接在js文件中这样定义的,国际化显示会有问题。

import i18n from '@/lang/index' const $t = i18n.global.t export const test= [   {     'value': '4',        'label': $t('aa.bb.cc.dd')//aa.bb.cc.dd是国际化键值   },] B入口有很多这样写法的国际化,这样的直接打包进了common.js文件中,在国际化文件还没请求回来的时候,这些就已经执行了,导致取不到国际化的value值,就会显示键值。  

3.按理来说打包是从入口开始,循环找依赖然后打包的,如果A入口没有引用B入口用的模块的国际化,那就不会被打包。但事实就是被打包了,挨个排除可能的原因,如:

将A入口的main.js引入的文件挨个注释,vite.config.ts文件中的配置挨个注释,入口只保留轻量级接续条一个。

最后终于发现,main.js引入的文件A.js,A.js引入了B.js,B.js引入了aicc首页的i18n。仿佛破案了。

然后我挨个排查A入口用的依赖,将循环引用到B入口的i18n的资源都给修改替代掉。最后发现单独打包A入口,并且注释掉vite.config.ts中的1+N配置时,不会打包B入口的i18n。如果入口不止A入口或者存在1+N配置,common.js都会包含B入口的国际化。最后打算新增一个vite.config.lightccbar.ts,分两次打包。在package.json中

"build": "npm-run-all --parallel buildIndex buildLightCCBar  --continue-on-error",     "buildIndex": "vite build --base=/service-cloud/aicc-web -l error --config ./vite.config.ts",     "buildLightCCBar": "vite build --base=/service-cloud/aicc-web -l error --config ./vite.config.lightccbar.ts",

 vite.config.ts中

build: {     rollupOptions: {       input: {        B入口       },}} vite.config.lightccbar.ts中 build: {     rollupOptions: {       input: {        A入口       },}}  

最后结果:

A入口首次加载资源  从32M降低到9M   将浏览器速率调低到fast 4G,  加载时间从17s 减少到7s。

  

标签:记录,--,入口,js,vite,config,打包
From: https://www.cnblogs.com/hua-hua-good-good-study-day-day-up/p/18399330

相关文章

  • 【工具分享】PyWxDump v3.1.31(最新版本) - 微信聊天记录解密
    工具介绍:PyWxDump是一款功能丰富的工具,主要用于获取微信账号信息(如昵称、账号、手机、邮箱和数据库密钥等)、解密微信数据库、查看和备份聊天记录。它支持多种数据库类型的合并查看,可以通过Web界面查看聊天记录,并且支持聊天记录的导出功能,如导出为html或csv格式,方便用户进行备份和......
  • 光影精灵10 Win1+Ubuntu18.04 双系统 踩坑记录
    前言第二年准备报名智能车了,当然还是创意组别。刚好买了今年新出的电脑光影精灵10,我想着也给它安一个双系统。但是没想到,相比于之前那个老电脑,新电脑的新硬件和驱动问题远比老电脑麻烦的多。在经历了一系列踩坑和疯狂查资料之后,加上重装系统N次,终于成功下车。遂把过程记录下来,以......
  • 深入了解Vite:依赖预构建原理
    前言前面我们有提到Vite在开发阶段,提倡的是一个no-bundle的理念,不必与webpack那样需要先将整个项目进行打包构建。但是no-bundle的理念只适合源代码部分(我们自己写的代码),vite会将项目中的所有模块分为依赖与源码两部分。依赖:指的是一些不会变动的一些模块,如:node_modules中的第......
  • 9.4日常记录
    一、索英笔试1.实现strcpy 1.charsrc[]="Hello,World!";:这里定义了一个字符数组。这个字符串"Hello,World!"的内容被直接存储在这个数组中,数组的大小由字符串的长度加上一个额外的位置用于存储字符串结束符'\0'自动确定。例如,这个数组的大小为13(12个字符加上一......
  • SQL——DQL用来查询数据库表中的记录(MySQL)
    DQL英文全称是DataQueryLanguage(数据查询语言),用来查询数据库表中的记录。关键字:select一、前言select  字段列表  from表名列表 --基本查询where  条件列表-----条件查询(where)groupby 分组字段列表 having分组后条件列表--分组查询(groupby......
  • qBittorrent编译记录
    下载地址https://sourceforge.net/projects/qbittorrent/files/qbittorrent/qbittorrent-4.4.5/wgethttps://master.dl.sourceforge.net/project/qbittorrent/qbittorrent/qbittorrent-4.4.5/qbittorrent-4.4.5.tar.gz或者rz上传qbittorrent-4.4.5.tar.gz环境debian12......
  • JAVA记录
    记录工作中用到的一些工具、方法、问题等。远程调试远程调试 启动端口8084,debug监听端口是8085java-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8085-jar/opt/yinsuankeji/digit.jar--server.port=8084&JDK17安装#java17安装sudoaptupd......
  • llama factory LoRA微调qwen大模型 | 新手炼丹记录(1)
            之前用本地机器微调qwen大模型,结果由于显存不够或者其他配置问题,总是无法正常训练,莫名其妙报错。只能去尝试一些参数很小的模型,qwen2:0.5b、gemma:2b之类的,实在不够看。    今天尝试使用了算力平台AutoDL算力云租赁计算资源来跑微调以及量化,尝试了qwe......
  • 记录一个opencv的imread方法无法读取成功的问题,【设计到visual studio和静态库(lib)匹配
    一、为什么会遇到这个问题公司需要对多图进行拼接,经过多番查找发现了OpenStitching这个库。可以实现多图拼接。在python段尝试了之后感觉效果不错,所以使用VisualStudio进行C++开发。在读取图片的时候发现imread方法无论怎么样都无法读取到图片。二、解决办法我一开始以为是路......
  • AC记录
    因为洛谷的remoteCodeForcesJudge挂了,先把一些过了的CF题的AC-code放在此处\(\small\textcolor{blue}{CF280C}\) \(\small\textcolor{purple}{CF911G}\) \(\small\textcolor{blue}{CF865D}\) \(\small\textcolor{purple}{CF960H}\) \(\small\textcolor......