HbuilderX 项目打包文件过大问题优化

文章目录

  • HbuilderX 项目打包文件过大问题优化
    • 主要操作
    • 收效甚微,但又有那么点用的方法
    • 使用 gulp 压缩(最后一步)
        • 使用与配置
      • 网上找的 gulp 优化压缩配置
      • 还未尝试可能有用的方法
    • 尝试过程中看到的一些优质文章

HbuilderX 项目打包文件过大问题优化

此前写过的另一篇相关文章:uniapp 打包小程序体积优化思路、优先排查优化项参考-CSDN博客

  • 完全不用看了,已经整合到这篇里了

主要操作

配置开发者工具上传代码压缩

请添加图片描述


(HbuilderX)运行(R)-运行到小程序模拟器(M)-运行时是否压缩代码(C)

  • 调试的时候有用(有人说打包也有用,我感觉是玄学,不过勾上也不影响)
    • 不过要调试 js 代码建议还是取消勾选,不然可能看不懂要调试的代码

请添加图片描述


HbuilderX 的配置(manifest.json 源码视图,搜 mp-weixin)

/* 小程序特有相关 */
"mp-weixin" : {"appid" : "wxf137596082a7507b","setting" : {"urlCheck" : false,"minified" : true,"postcss" : false,"es6" : false},"lazyCodeLoading" : "requiredComponents","usingComponents" : true,"permission" : {},"optimization" : {"subPackages" : true}
},

图片等静态资源云化

  • 图片、视频、字体文件等放到服务器上,用链接的形式引入,避免被打包

使用分包

  1. 页面分包(非 tabbar 页面分包及其用到的组件)
    1. 一般 tabbar 页面是最常用页面,进入到小程序立马访问、切换的概率较大, 所以放主包,避免因为分包加载影响用户体验
  2. 组件分包(如用到的 uni 组件、uView 组件、自己写的组件)
    1. uView 配置按需引入

uni_modules 也采用分包

  • 虽然 uniapp 官方说了 uni_modules 会根据使用用到而决定是否要打包过滤,但分包前后还是有区别的,所以我估计此前是理解错了
  • 虽然会过滤没用到的,但用到了的也会打包到主包里去,就导致了主包偏大无法上传的问题,不是说放到 uni_modules 按需引用就不用管了
  • 将 uni_modules 里的部分组件分包后就小了一两百kb了
    • uni_modules组件分包(迁移)_姽式、的博客-CSDN博客
    • uni-app uni_modules 怎么打包到分包 - 我爱学习网 (5axxw.com)

各类第三方类库尽量使用按需引入的方式

  • echarts(定制化导出离线包引入/按需引入),echarts 5.X 全量引入和按需引入最终打包出的小程序测试包大小差了快30KB

删除 static 目录下的无用文件(经观察,不管用没用到都会被打包进去)



收效甚微,但又有那么点用的方法

删除无用组件、代码

  • 未用到的业务代码删除(页面文件、封装的组件、方法类、通用样式……)
    • 复用项目难免会有很多之前项目的组件、业务代码(推荐给自定义组件加上统一前缀,然后在 pages.json 里配置 easycom 自动按需引入,后续没用到的业务组件就不会自动打包了,也不需要手动删除;虽然我感觉没用到的组件打包时会被自动删除,但删了一堆文件确实打包体积有所减小,就没过多去分析具体情况)

无用 scss 文件内容删除(主包不单单是 vendor.js,vendor.js 找不到地方下手,可以考虑 scss 文件也减减体积)

  • 如 uni.scss
    • 注意事项 | uView - 多平台快速开发的UI框架
    • uni.scss中所写的一切内容,都会注入到每个声明了scss的文件中,这意味着,如果您的uni.scss如果有几百行,大小10k左右,那么这个10k都会被注入所有的 其他scss文件(页面)中,如果您的应用有50个页面,那么有可能因此导致整体的包体积多了50 * 10 = 500k的大小,这可能会导致小程序包太大而无法预览和发布, 所以,我们建议您只将scss变量相关的内容放到uni.scss中。
  • 如何解决引入uView-ui导致主包过大问题?:减少在uni.scss的样式,放入app.vue中。uni.scss的样式会导入uview每一个组件的scss中


使用 gulp 压缩(最后一步)

使用 gulp 对打包后的文件进行压缩

  • 压缩 js 和 json 文件的前后对比(以我压缩的项目来说:①总体积:2.73MB =>2.66MB;②主包:2.01MB => 1.95MB,主包减小了差不多 61.44KB

处理前后文件大小对比

微信开发者工具中代码依赖对比


使用与配置

①新建一个目录,在目录里新建下述两个文件(gulpfile.js、package.json)

②在目录下执行 npm i

  • 我的环境:node v14.18.0、npm 6.14.15

③HbuilderX 把项目打包出来,将其打包好的 mp-weixin 目录下所有文件拷到项目里去(直接放根目录的 src 里)

④终端执行 gulp,或者 npm run build

  • 好像运行完 VS Code 会卡死……但问题不大,打包了几次都没啥问题

⑤将根目录生成的 dist 目录里的文件拿去运行(至此 js、json 文件就已经压缩好了,dist 里是压缩后的完整项目代码)

⑥测试一下功能是否正常,若正常上传代码进行发布(希望你大小降到了可以发布的程度~

gulpfile.js

/** @FilePath     : /test-gulp-zip/gulpfile.js* @Author       : suwanbin* @Date         : 2023-11-18 17:13:09*/
// 基础库
const gulp = require('gulp')
const uglify = require('gulp-uglify')
// const uglifyCss = require('gulp-minify-css')
// const cleanCss = require('gulp-clean-css');
const jsonminify = require('gulp-jsonminify');
// 文件重命名
const rename = require('gulp-rename')
// 清空文件夹
const clean = require('gulp-clean')// 删除文件夹
gulp.task('clean', function () {return gulp// read:是否读取文件,true 读取, false 不读取,加快程序// allowEmpty:允许文件夹为空或不存在,要不然会报错.src('./dist/', { read: false, allowEmpty: true }).pipe(clean());
})// 打包 JS 任务
gulp.task('zipjs', function () {return gulp.src('./src/**/*.js')               // 定位需要压缩的文件// .pipe(babel({                // ES6 转 ES5,看需求而定//   presets: ['@babel/env']// })).pipe(uglify())                 // 文件压缩.pipe(gulp.dest('./dist/'))     // 输出
})// // 打包 CSS 任务
// gulp.task('zipcss', function () {
//   return gulp
//     .src(['./src/**/*.css', './src/**/*.wxss'])               // 定位需要压缩的文件
//     .pipe(cleanCss())                 // 文件压缩
//     .pipe(uglifyCss())                 // 文件压缩
//     .pipe(gulp.dest('./dist/'))     // 输出
// })// 打包 JSON 任务
gulp.task('zipjson', function () {return gulp.src('./src/**/*.json')               // 定位需要压缩的文件.pipe(jsonminify())                 // 文件压缩.pipe(gulp.dest('./dist/'))     // 输出
})// 不推荐压缩 HTML、WXML 网上说可能会有问题// 发布文件移动
gulp.task('move', function () {return gulp.src('./src/**/*.*').pipe(gulp.dest('./dist/'))
})// 配置默认任务
// module.exports.default = gulp.series('clean', 'zipjs')
// gulp.task('default', gulp.series('clean', 'zipjs', 'zipcss', 'zipjson', 'move'))
gulp.task('default', gulp.series('clean', 'zipjs', 'zipjson', 'move'))

package.json

{"name": "gulp-zip-tools","version": "1.0.0","description": "gulp 压缩工具,临时压缩用","main": "gulpfile.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "gulp"},"author": "suwanbin","license": "ISC","devDependencies": {"@babel/core": "^7.23.3","@babel/preset-env": "^7.23.3","gulp": "^4.0.2","gulp-babel": "^8.0.0","gulp-clean": "^0.4.0","gulp-clean-css": "^4.3.0","gulp-jsonminify": "^1.1.0","gulp-minify-css": "^1.2.4","gulp-rename": "^2.0.0","gulp-uglify": "^3.0.2"}
}

优质文章:使用gulp打包js/scss/less/font文件 - Elwin0204 - 博客园 (cnblogs.com)

  • 可以用来了解 gulp,我感觉写的挺好的

网上找的 gulp 优化压缩配置

抛砖引玉,留给想要跟进一步与优化的朋友去探索

使用网友开源的压缩工具:web-dist: 传统模式开发的web站点 进行整站所有文件压缩及混淆处理 (gitee.com)【荐】

  • 好像某些情况下比我自己写这个压缩的小(虽然有时候会大一点)

使用gulp解决小程序代码包过大问题_gulp打包前端代码,修改文件支持最大容量_寂寞花如雪的博客-CSDN博客

  • 本地目录的是基于这个文章去弄的,装依赖有些问题,解决到能跑了
  • 结果打包出来的还没有我前文 只压缩 js 和 json 的小……

微信小程序——gulp处理文件_mb5fdcae83766b7的技术博客_51CTO博客

  • gulp 3.9.1 版本,暂不知道需要对应什么版本的 node,我本地 14.18.0 的不行

还未尝试可能有用的方法

HbuilderX 项目转 cli 项目

  • uni-app HBuilderX项目转为cli项目及踩坑记录

  • 记一次uni-app 小程序打包因主包太大的优化过程 - 简书 (jianshu.com)

    • 用 glup 打包

解决 vue2 + vant2 打包文件(vendor.js、app.css)过大问题_vant 打包-CSDN博客

  • ↑ 将组件库从主包里去掉,用 cdn 引入

尝试过程中看到的一些优质文章

感谢各位网友的分享~

uni-app 打包h5 同类等vender 过大体积处理 - 简书 (jianshu.com)

记一次uni-app 小程序打包因主包太大的优化过程 - 简书 (jianshu.com)

解决uni-app编译后vendor.js文件过大 - DCloud问答

uniapp-打包小程序 用分包打包 在分包中vendor.js太大 - DCloud问答

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Shell循环:for(三)

示例:使用for实现批量主机root密码的修改 一、前提 已完成密钥登录配置(ssh-keygen)定义主机地址列表并了解远程修改密码的方法 [rootlocalhost ~]# ssh-keygen #设置免密登录[rootlocalhost ~]# ssh-copy-id 192.168.151.151 二、演示…

科研学习|论文解读——Open government research over a decade: A systematic review

Open government research over a decade: A systematic review 十年来的开放政府研究:一个系统性综述 摘要 在过去十年中,对开放政府的学术研究蓬勃发展。然而,对开放政府的全面审查是有限的。这一研究空白不仅阻碍了我们对开放政府整体知…

mysql区分大小写吗

mysql在windows下默认是不区分大小写的,在linux下默认是区分大小写的。 所以,为了避免出问题,许多公司的数据库编程规范中明确规定:库名、表名、列名、索引名一律小写,不同单词之间以下划线分割,且控制在3…

重庆市失业金申领流程

1.领失业金的前提:非本人意愿中断就业。个人理解就是不是主动辞职才能领。 2.因此公司在处理社保减员的时候,不能是劳动者主动提出离职。 3.社保减员可选择原因:其他原因中断缴费 / 由单位提出双方协商一致解除劳动合同。 4.当社保暂停缴费…

算法——滑动窗口

滑动窗口大致分为两类:一类是窗口长度固定的,即left和right可以一起移动;另一种是窗口的长度变化(例如前五道题),即right疯狂移动,left没怎么动,这类题需要观察单调性(即指针)等各方…

以下哪项不是在内蒙古举办的?()

需要查看更多试题和答案,可以前往题海舟(题海舟)进行搜题查看。可以搜“题干关键词”。 以下哪项不是在内蒙古举办的?() A.中蒙博览会 B.东北亚区域合作高峰论坛 C.中蒙俄合作高层论坛 D.中日经济合作会 …

C++基础 -32- 逻辑运算符重载

逻辑运算符重载格式 bool operator&&(data1&a,data2&b) {if(a.a&&b.a){return true;}elsereturn false; }举例使用单目运算符重载 #include "iostream"using namespace std;class data1 {public :int a;data1(int a):a(a){} };class d…

(数据结构)顺序表的查找

静态分配代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct LinkList {int data[MAX];int lenth; }Link; //初始化 void CreateList(Link* L) {L->lenth 0;for (int i 0; i < MAX; i){L->data[i] 0;} } //插入 …

策略模式与简单工厂模式:终结if-else混乱,让代码更清爽

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概4500多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#x…

计算机网络扫盲(2)——网络边缘

一、概述 在计算机网络得到术语中&#xff0c;我们把与因特网相连的计算机或其他设备称为端系统&#xff08;或者主机&#xff09;&#xff0c;如下图所示&#xff0c;因为它们位于因特网的边缘&#xff0c;所以被称为端系统。因特网的端系统包括了桌面计算机&#xff…

Hdoop学习笔记(HDP)-Part.09 安装OpenLDAP

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

蓝桥杯day03——Bigram 分词

1.题目 给出第一个词 first 和第二个词 second&#xff0c;考虑在某些文本 text 中可能以 "first second third" 形式出现的情况&#xff0c;其中 second 紧随 first 出现&#xff0c;third 紧随 second 出现。 对于每种这样的情况&#xff0c;将第三个词 "th…

Android布局控件之LinearLayout、RelativeLayout、GridLayout、ScrollView

线性布局&#xff08;LinearLayout&#xff09; orientation horizontal:水平从左往右vertical:垂直从上到下若不指定orientation属性&#xff0c;默认为水平 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http:…

什么是DDoS攻击

DDoS攻击 1. 定义2. DDoS攻击类型2.1 网络层攻击2.2 传输层攻击2.3 应用层攻击 3.DDoS攻击态势特点 1. 定义 分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一种常见的网络攻击形式。攻击者利用恶意程序对一个或多个目标发起攻击&#xff0c;企图通过大规模互联网流量耗尽…

微软与 OpenAI 宫斗大戏背后的故事【番外详细剖析篇】

​​微软和 OpenAI 曾精心制定了一个协议&#xff0c;目的是既要雄心勃勃又要确保安全地发布人工智能产品。然而&#xff0c;OpenAI 的董事会突然打破了所有这些精心策划的计划。 在感恩节前一个星期五的上午 11:30 左右&#xff0c;微软的首席执行官 Satya Nadella 正在和高层…

Git 简介及异常场景处理

一、简介 介绍Git之前&#xff0c;还得先介绍下 版本控制系统&#xff08;VCS&#xff09;&#xff0c; 和它的发展历史 纵观版本控制系统的发展历史&#xff0c;广义上讲&#xff0c;版本控制工具的历史可以分为三代&#xff1a; 第一代 第一代版本控制系统被称为本地版本控…

文艺复兴!ICO或再次兴起?香港Web3崛起前五部曲之一!

近日&#xff0c;香港证券及期货专业总会发布了《2024至2025年度财政预算案》&#xff0c;提出了一系列举措&#xff0c;其中最引人注目的莫过于政府考虑推出ICO发行机制&#xff0c;这一预算案被广泛视为香港在Web3崛起前的文艺复兴五部曲之一&#xff0c;引发了业界和投资者的…

关于 ls -s 输出文件大小的单位问题的讨论(stat 和ls -s的块不一样的,只是名称相同而已)

自己看书正好看到这里&#xff0c;正纳闷呢&#xff0c;上网查了下&#xff0c;发现不是我自己在为这个问题感到困惑。 有个大哥提出一个问题&#xff1a; 问题标题&#xff1a; ls -s的单位到底是什么&#xff1f; man ls -s, --size print the alloca…

MyBatis的创建,简单易懂的一篇blog

文章目录 一、MyBatis是什么二、操作流程三.配置resource总结 一、MyBatis是什么 MyBatis 是⼀款优秀的持久层框架&#xff0c;它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注…

Azure Machine Learning - 使用 REST API 创建 Azure AI 搜索索引

本文介绍如何使用 Azure AI 搜索 REST AP和用于发送和接收请求的 REST 客户端以交互方式构建请求。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&…