uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题

uniapp开发小程序这一块,相信很多开发者都遇到过代码体积太大无法打包的问题,还有vendor.js过大无法打包。这时候就要优化小程序包大小。下面分享一下我在实际项目中使用的方法,并解决了相应的问题,这里是我的解决思路。小伙伴们也可以根据自身情况,参考一下。希望能给大家一些帮助吧。

方法一:线上图片

小程序体积大是因为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(/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、输入小程序名称和appid点击发行即可。然后控制台会开始编译,等编译好了会自动打开微信开发者工具。

在这里插入图片描述

  • 如果手动发行,则点击发行按钮后,会在项目的目录 unpackage/dist/build/mp-weixin 生成微信小程序项目代码。在微信小程序开发者工具中,导入生成的微信小程序项目,测试项目代码运行正常后,点击“上传”按钮,之后按照 “提交审核” => “发布” 小程序标准流程,逐步操作即可。
  • 如果在发行界面勾选了“自动上传微信平台”,则无需再打开微信工具手动操作,将直接上传到微信服务器提交审核。
4、现在缩小了很多,以前3.2M,现在只有1.8M,现在不管是用来上传代码还是调试都完全没有问题了。

在这里插入图片描述

5、“运行” 和 “发行” 的区别:

运行:模式有 SourceMap 可以方便的进行断点调试;编译出的代码存放于根目录下的 /dist/dev/目录。
发行:模式会将代码进行压缩,体积更小更适合发布为正式版应用;编译出的代码存放于根目录下的 /dist/build/ 目录。

我的博客只写前端博文,点击我去看更多喜欢的前端博文,欢迎大家一起讨论学习!【https://blog.youkuaiyun.com/qq_29101285?spm=1011.2266.3001.5343】
<think>嗯,用户问的是UniApp机制在不同平台的应用场景和必要性,特别是微信小程序、H5和APP这三个平台。首先,我需要回顾一下分机制的基本概念。分要是为了优化应用性能,减少初始加载时间,把代码分成多个,按需加载。然后,针对各个平台的具体情况进行分析。 微信小程序的分是必须的,因为限制在2MB,超过的话就需要分UniApp微信小程序中的分配置应该和原生微信类似,在pages.json里设置subPackages。用户提供的引用[1]和[4]都提到了这一点,尤其是引用[4]提到分处理是因为微信的小限制,所以这部分要详细说明。 然后是H5平台。H5没有小限制,分要是为了优化首屏加载速度。用户可能想知道在H5中使用分是否有必要,这时候需要解释H5的分机制和Webpack的分策略有关,虽然技术上可行,但实际应用场景可能不多,更多的是代码分割(code splitting)的概念。引用[4]提到H5转小程序需要注意分,但H5本身的分可能更多是项目结构的管理。 接下来是APP平台。APP通常使用原生分,比如Android的动态模块或者iOS的按需加载资源。UniAppAPP端的分可能涉及原生插件的使用,或者通过模块化拆分来优化启动时间。不过APP的体积限制不像微信小程序那么严格,更多是为了性能优化。需要确认UniApp官方文档是否支持APP的分,或者是否有其他机制代替。 用户可能还关心不同平台分配置的差异,比如pages.json中的配置是否在各个平台都适用,或者是否需要特定平台的调整。例如,引用[2]提到v-if在微信小程序的适配问题,可能配置分时也有类似需要注意的地方,比如路径设置或者资源加载。 此外,引用[3]提到的页面通信问题,分后页面之间的跳转和数据传递是否有影响?比如跨分跳转是否需要特殊处理参数传递,或者状态管理的方式是否需要调整。这部分可能需要补充说明,但用户的问题要聚焦在分的应用场景和必要性,可能不需要深入通信细节,但可以简要提及。 总结一下,回答的结构需要分平台对比,每个平台的分必要性、应用场景、配置方法和注意事项。同时引用用户提供的资料来支持观点,比如微信小程序的分限制和H5转换时的调整。注意用户可能想知道是否需要在不同平台使用分,以及如何配置,所以对比分析时要突出各平台的特点,比如微信必须分,H5可选优化,APP可能有其他机制。</think>### UniApp机制在不同平台的应用场景及必要性分析 #### 一、微信小程序平台 1. **必要性** 微信小程序小有严格限制(2MB),超出后必须通过分机制分割代码[^4]。UniApp的分配置在`pages.json`中定义`subPackages`,原生微信小程序的分逻辑一致[^1]。 ```json "subPackages": [{ "root": "subpackageA", "pages": [{ "path": "page1", "style": {} }] }] ``` 应用场景: - 仅保留核心功能(如启动页、登录页)以控制体积。 - 按需加载低频页面(如设置页、详情页),提升启动速度。 2. **注意事项** -后需测试跨分跳转,需使用`uni.navigateTo`并指定完整路径。 -内资源需独立管理,避免间的冗余依赖。 --- #### 二、H5平台 1. **应用场景** H5无小限制,分要用于优化首屏加载性能。通过Webpack的分策略(`optimization.splitChunks`),将公共依赖(如Vue运行时)独立为`vendor.js`,减少体积。 ```javascript // vue.config.js configureWebpack: { optimization: { splitChunks: { chunks: 'all' } } } ``` 2. **必要性分析** - **非必需**:H5的分更多是工程化优化,而非强制要求。 - **适用场景**:SPA(单页应用)中复杂模块的懒加载,例如管理后台的报表模块。 --- #### 三、APP平台 1. **原生分机制** - **Android**:通过`Dynamic Feature Modules`实现按需下载。 - **iOS**:使用`On-Demand Resources`动态加载资源。 UniApp中可通过原生插件或条件编译实现类似功能,但需要原生开发支持。 2. **UniApp的分支持** - **非官方支持**:APP端无内置分配置,需依赖原生方案或模块化设计。 - **替代方案**:通过`uni.requireNativePlugin`动态加载原生插件,或使用`uni-app-x`(实验性)优化代码结构。 --- #### 四、平台对比总结 | 平台 | 必要性 | 核心目的 | 配置方式 | |---------------|----------------|--------------------------|--------------------------| | 微信小程序 | **强制要求** | 规避2MB限制 | `pages.json`定义分 | | H5 | 可选优化 | 首屏性能优化 | Webpack代码分割 | | APP | 非必需 | 动态功能扩展 | 原生开发或模块化设计 | --- #### 五、通用注意事项 1. **跨平台兼容性** -路径需符合各平台规范(如微信小程序禁止分嵌套)。 - 使用条件编译(`#ifdef MP-WEIXIN`)处理平台差异[^2]。 2. **资源管理** -内静态资源(如图片)需隔离,避免重复打包- 公共组件建议保留在,减少冗余。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值