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

文章目录

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

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

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

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

主要操作

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

请添加图片描述


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

  • 调试的时候有用(有人说打包也有用,我感觉是玄学,不过勾上也不影响)
    • 不过要调试 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

请添加图片描述

请添加图片描述


使用与配置

①新建一个目录,在目录里新建下述两个文件

②在目录下执行 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问答

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu配置免密登录vscode

1、配置免密登录 (1)在windows系统cmd下运行命令 ssh-keygen 一路回车,将会在C:\Users\用户名\.ssh目录下生成两个文件:id_rsa和id_rsa.pub。如下图所示。 (2)进入.ssh目录。如果想使用root用户&#xff0…

ArrayList与顺序表的简单理解

前言----list 在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable也是一个接口,表示实现该接口的类是可以逐个元素进…

鸿蒙4.0开发笔记之ArkTS语法基础@Entry@Component自定义组件的使用(九)

文章目录 一、自定义组件概述1、什么是自定义组件2、自定义组件的优点 二、创建自定义组件1、自定义组件的结构2、自定义组件要点3、成员变量的创建4、参数传递规则 三、练习案例 一、自定义组件概述 1、什么是自定义组件 在ArkUI中,UI显示的内容均为组件&#xf…

443. 压缩字符串

这篇文章会收录到 : 算法通关村第十二关-黄金挑战字符串冲刺题-CSDN博客 压缩字符串 描述 : 给你一个字符数组 chars ,请使用下述算法压缩: 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 : 如果这一组长度为 1 ,…

c++ opencv使用drawKeypoints、line实现特征点的连线显示

前言 图像经过算子处理后得到若干特征点,使用opencv进行渲染显示出这些特征点并且连线,更直观的对比处理前后的一些差异性 demo核心代码 //画出特征点并连线 void drawFilterLinePoints(cv::Mat& srcMat, cv::Point2f pointStart, cv::Point2f po…

基于FactoryBean、实例工厂、静态工厂创建Spring中的复杂对象

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

LD_PRELOAD劫持

LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载&#xff0c;在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file&#xff0c;那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…

P9240 [蓝桥杯 2023 省 B] 冶炼金属(比值问题)

数学分析&#xff1a; 1. max(最大比值) A/B 余数p&#xff08;p<B&#xff09; > Amax*Bp 反证&#xff1a;若max不为最大,则设maxn为最大比值 (maxn)*Bmax*Bn*Bp1 > A (n*Bp1 > p ,矛盾) 故max为最大比值 2.min(最小比值…

随时随地,打开浏览器即可体验的在线PS编辑器

即时设计 即时设计是国产的专业级 UI 设计工具&#xff0c;不限平台不限系统&#xff0c;在浏览器打开即用&#xff0c;能够具备 Photoshop 的设计功能&#xff0c;钢笔、矢量编辑、矩形工具、布尔运算等设计工具一应俱全&#xff0c;是能够在线使用的 Photoshop 免费永久工具…

算法训练 第九周

二、删除排序链表中的重复元素 II 1.遍历 由于给定的链表是排好序的&#xff0c;因此重复的元素在链表中出现的位置是连续的&#xff0c;因此我们只需要对链表进行一次遍历&#xff0c;就可以删除重复的元素。由于链表的头节点可能会被删除&#xff0c;因此我们需要额外设定一…

BGP综合实验(IP)

实验要求&#xff1a; 实验思路&#xff1a; 1.划分IP地址&#xff1a; 将172.16.0.0/16的网段划分为172.16.0.0/24的多个网段&#xff0c;因为在实际工程当中&#xff0c;24的网段更符合用户网段&#xff0c;因此先将网段划分为172.16.0.0 /24的多个子网掩码为24的网段&…

前五年—中国十大科技进展新闻(2012年—2017年)

前五年—中国十大科技进展新闻&#xff08;2012-2017&#xff09; 2017年中国十大科技进展新闻1. 我国科学家利用化学物质合成完整活性染色体2. 国产水下滑翔机下潜6329米刷新世界纪录3. 世界首台超越早期经典计算机的光量子计算机诞生4. 国产大型客机C919首飞5. 我国首次海域天…

Python爬虫入门:如何设置代理IP进行网络爬取

目录 前言 一、获取代理IP 1.1 获取免费代理IP 1.2 验证代理IP 二、设置代理IP 三、使用代理IP进行网络爬取 四、总结 前言 在进行网络爬取时&#xff0c;经常会遇到一些反爬虫的措施&#xff0c;比如IP封锁、限制访问频率等。为了解决这些问题&#xff0c;我们可以使用…

【LeetCode刷题】--38.外观数列

38.外观数列 方法&#xff1a;遍历生成 该题本质上是依次统计字符串中连续相同字符的个数 例如字符串 1112234445666我们依次统计连续相同字符的个数为: 3 个连续的字符 1, 222 个连续的 2&#xff0c;1 个连续的字符 3&#xff0c;3个连续的字符 4&#xff0c;1个连续的字符…

深入理解Transformer,兼谈MHSA(多头自注意力)、LayerNorm、FFN、位置编码

Attention Is All You Need——集中一下注意力 Transformer其实不是完全的Self-Attention结构&#xff0c;还带有残差连接、LayerNorm、类似1维卷积的Position-wise Feed-Forward Networks&#xff08;FFN&#xff09;、MLP和Positional Encoding&#xff08;位置编码&#xf…

vivado综合分析与收敛技巧1

使用细化视图对 RTL 进行最优化 完成任意实现步骤后使用 report_timing 、 report_timing_summary 或 report_design_analysis 分析时序结果时&#xff0c; 您必须审查关键路径结构 &#xff0c; 了解是否可通过修改 RTL 、使用综合属性或者使用其他综合选项来更有效地将…

语音 self-supervised learning (未完待续)

1. 简介 深度学习被分为&#xff1a;监督学习&#xff0c;无监督学习和自监督学习。 监督学习近些年获得了巨大的成功&#xff0c;但是有如下的缺点&#xff1a; 1.人工标签相对数据来说本身是稀疏的&#xff0c;蕴含的信息不如数据内容丰富&#xff1b; 2.监督学习只能学到特…

【开源】基于Vue.js的大学计算机课程管理平台的设计和实现

项目编号&#xff1a; S 028 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S028&#xff0c;文末获取源码。} 项目编号&#xff1a;S028&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2…

慢 SQL 分析及优化

目录 分析慢 SQL SQL 优化 单表优化 多表优化 慢 SQL&#xff1a;指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法&#xff1a;通过慢查询日志来查找慢 SQL MySQL 的慢查询日志是 MySQL 提供的一种日志记录&#xff0c;它用来记录在 MySQL 中响应时间超过阈值的语句&…

【攻防世界-misc】reverseMe

1.下载后&#xff0c;得到这样一张图片 2.利用在线翻转网站获取值&#xff0c;在线旋转图片工具|在线翻转照片|调整照片方向|生成镜像图片 - 改图宝 反转后的图片&#xff0c;将值提取并上传。