解决使用uniapp开发微信小程序时主包太大和vendor.js过大无法打包的问题

文章介绍了如何通过将静态图片上传至服务器、利用分包加载减小主包体积、设置manifest.json优化子包和主包结构以及进行代码压缩,有效解决uniapp开发中代码体积过大问题。

在uniapp开发小程序这一块,相信很多开发者都遇到过代码体积太大无法打包的问题,这时候就要优化小程序包大小。下面分享一下我的解决思路。希望能给大家一些帮助吧。

方法一:线上图片
小程序体积大是因为static目录的图片资源过大的话,我们可以将static的图片上传图片服务器上去,小程序使用链接的形式来下载使用图片。

静态图片使用线上地址,不要放到项目中,除了navBar的icon,因为那个只能使用本地资源,相对来说这个不大。

1、上传图片资源到图片服务器上去
将切好的图片上传到图片服务器上面,
比如 https://www.xxxxxxxx.com.cn/wx/static/images/1.png

2、处理JS和vue中的图片引用
2.1、定义JS全局变量
在main.js页面定义js全局变量

Vue.prototype.staticDir = 'https://www.xxxxxxxx.com.cn/wx/static/'; 
Vue.prototype.getStaticFilePath = function (url) {
    return Vue.prototype.staticDir + url;  
}



2.2、替换vue中的图片地址
以前我们引用的图片地址是下面这样的:

<view class="demo">
    <image src="/static/images/1.png"></image>
</view>



现在我们修改src成这样即可:

<view class="demo">
    <image :src="getStaticFilePath('/images/1.png')"></image>
</view>



3、处理css中的图片引用
uniapp根目录下有一个特殊的文件uni.scss,在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的编译器在webpack配置中特殊处理了这个uni.scss,使得每个scss文件都被注入这个uni.scss,达到全局可用的效果。我们将scss的static目录变量放到这里,即可全局使用了。

3.1、定义scss全局变量
在uni.scss的最后添加:

// 背景图片路径
$custom-bg-img-url:'https://www.xxxxxxxx.com.cn/wx/static/';

3.2、css文件改名成scss文件
将原来的css文件改名成scss文件,并像下面这样修改vue中的引用。加上了lang=“scss”

<style scoped lang="scss">

</style>


3.3、替换css中的图片地址
以前css中的背景图地址是下面这样的:

.bgimg {
    width: 40rpx;
    height: 40rpx;
    background-image: url(/https/blog.csdn.net/static/imags/1.png);
    background-size: cover;
}


现在我们修改url成这样即可:

.bgimg {
    width: 40rpx;
    height: 40rpx;
    background-image: url($custom-bg-img-url+'/images/1.png');
    background-size: cover;
}


方法二:分包加载
除了TabBa的页面,其他的页面进行分包处理,保证主包的大小,因为在编译后那些静态js和组件也会放入主包中,分包方式官网有详细解释。

目前小程序分包大小有以下限制:

整个小程序所有分包大小不超过 20M
单个分包/主包大小不能超过 2M

对小程序进行分包,可以优化小程序首次启动的下载时间,以及在多团队共同开发时可以更好的解耦协作。

具体使用方法请参考:

官网介绍
使用分包
独立分包
分包预下载
分包异步化

方法三:依赖分离
使用分包之后会发现遇到了一个奇怪的问题,子包的组件和js文件会被打包到主包的vendor.js文件中,这就导致了vendor.js过大。

1、检查manifest.json,在这个文件下的源码视图中,在mp-weixin节点有个optimization,
optimization下的subpackages节点时用来控制微信分包的,需要将此节点设为true

"optimization" : {
    "subpackages" : true
}


2、配置好重行运行,会发现分包的js文件将不会再打包到主包的vendor.js中了
方法四:代码压缩
1、在HBuilder上面点击运行——>运行到小程序模拟器——>运行时是否压缩代码


2、在HBuilder上面点击发行——>小程序——>发行——>小程序-微信(仅适用于uni-app)(W)


3、点击发行。然后控制台会开始编译,等编译好了会自动打开微信开发者工具


4、现在缩小了很多,以前3.2M,现在只有1.8M,现在不管是用来上传代码还是调试都完全没有问题了。

————————————————
版权声明:本文为CSDN博主「赢乐」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shanghai597/article/details/131593381

<think>我们参考了提供的三个引用,可以总结出以下解决vendor.js的方案: 1. 开启分优化:在manifest.json中配置"optimization": { "subPackages": true },将vendor.js(通常在common目录)设置为分。 2. 配置分:在pages.json中,将存放vendor.js的目录(如common)设置为分,注意该分含页面,仅存放资源。 3. 此外,引用[3]提到处理css中的图片引用,通过uni.scss全局处理静态资源路径,避免重复打包。 根据这些信息,我们给出详细步骤: 1. **修改manifest.json**:在mp-weixin配置项中添加optimization设置。 ```json "mp-weixin": { // ...其他配置 "optimization": { "subPackages": true } } ``` 2. **配置分**:在pages.json中添加分配置,将common目录设置为分(假设vendor.js在common目录下)。 ```json { "subPackages": [ { "root": "common", "name": "common", "pages": [] } ] } ``` 注意:这里pages为空,表示该分含页面,只存放公共资源。 3. **优化静态资源引用**:引用[3]中提到,在uni.scss中定义资源路径变量,避免在多个地方重复引用图片等静态资源,从而减少小。具体做法: 在uni.scss文件中定义变量: ```scss $static-path: "~@/static/"; ``` 然后在其他scss文件中使用: ```scss background-image: url($static-path + "logo.png"); ``` 这样处理可以让编译器更好地优化资源。 4. **其他优化建议**: - 检查是否引入了过的第三方库,尝试寻找更轻量级的替代方案。 - 使用小程序的分预加载功能,提高分的加载效率。 - 清理未使用的代码资源,减少体积。 §§相关问题§§ 1. 如何进一步优化uniapp打包后的小程序体积? 2. 除了分,还有哪些方法可以减少vendor.js小? 3. 小程序后资源加载会变慢,如何解决? </think> 基于提供的引用信息相关资料,我将为您详细解决UniApp打包微信小程序`vendor.js`过问题: ### 解决方案 1. **启用分优化**(核心方案) 在 `manifest.json` 中配置分优化参数: ```json "mp-weixin": { "optimization": { "subPackages": true // 启用子分割 } } ``` 此选项会让编译器自动拆分公共模块到分中[^1][^2]。 2. **创建资源分** 在 `pages.json` 中添加配置,将公共资源目录(通常为 `common`)设置为独立分: ```json { "subPackages": [{ "root": "common", // 存放vendor.js的资源目录 "pages": [] // 空数组表示仅存放资源 }] } ``` 这可将`vendor.js`移出[^1][^2]。 3. **图片资源优化** 在 `uni.scss` 中全局配置图片路径变量: ```scss $static-path: "/static/"; // 统一资源路径 ``` 组件中使用: ```scss .logo { background-image: url($static-path + "logo.png"); } ``` 避免重复打包静态资源[^3]。 4. **补充优化建议** - 使用小程序**分预下载**加速加载 - 检查`node_modules`依赖: ```bash npx depcheck # 检测未使用依赖 ``` - 升级`webpack`构建配置(需自定义): ```js // vue.config.js configureWebpack: { optimization: { splitChunks: { maxSize: 500000 // 限制单个小(单位字节) } } } ``` > **避坑提示**:小程序后整不能超过20MB,单个分/上限为2MB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值