uniapp微信小程序之分包异步化

前言

uniapp开发微信小程序开发完功能之后,发现项目大小超过了2M不能发布,确实是一件令人头疼的时候,下面我将使用分包+异步化方案来解决这个问题。

开始分包

这是文档:基础能力 / 分包加载 / 使用分包

原理

是把页面单独存放一个目录(模块),然后配置使用

项目配置

解释:subPackages是专门存放分包页面的,一个分包为一项,所以它是集合,root则是当前分包的跟路径

// pages.json
{
    "pages": [{
		"path": "pages/index/index",
        "style": 
        {
            "navigationBarTitleText" : "首页"
        }
	}],
    "subPackages": [
        {
            "root": "pages-three",
            "pages": [
                {
                    "path" : "three-render/three-render",
                    "style" : 
                    {
                        "navigationBarTitleText" : "子包pages-three的测试页面"
                    }
                }
            ],
        }
    ]
}

使用分包异步化

配置完分包之后,正常情况下,主包是不可以使用子包的代码的,如果确实需要用到,微信提供了另一个技术:分包异步化

这是文档:基础能力 / 分包加载 / 分包异步化

原理

允许主包异步加载并使用子包的组件,未加载完成的时候,使用占位组件展示,加载完成则会替换为真实的组件

如图所示:threeJs是主包想要加载的组件

image-20241216185413672

项目配置

// pages.json
{
    "pages": [
        {
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "首页",
				"usingComponents": {
				    "three-js": "/pages-three/threeJs/threeJs" // 组件的路径
				  },
				  "componentPlaceholder": {
				    "three-js": "view" // 未完成时的占位组件
				  }
			}
		}
    ]
}

注意点

重点:我们必须在子包的某个页面中,去使用这个组件,否则打包的时候会找不到文件,就像下面一样

image-20241216190855925

只要在子包的某个页面,导入并渲染了组件,打包的时候threeJs就会在文件中了

配置完成,开始使用

然后呢,在主包的tab页使用这个组件,效果如下,是可以正常显示的

image-20241217102244544

项目打包

当我们打包的时候,发现主包还是很大

资源占用异常

image-20241217102605107

image-20241217102728028

原因

因为uniapp开发的小程序使用的node_modules里面的包永远会打包到主包的vendor.js中,即使是你没有在主包中直接使用。

解决方案

要解决也很简单,把node_modules中的npm包移动到子包的目录中

image-20241217110540653

然后可以修改npm的导入路径,或者在配置文件中统一设置别名,这样会更方便

// vite.config.js
import path from "path";
import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";

export default defineConfig({
  plugins: [
    uni(),
  ],
  resolve: {
    alias: {
      "three-platformize": path.resolve(__dirname, "./pages-three/npm/three-platformize"),
    },
  },
});

这样打包three就会进入子包了

image-20241217110808070

完成

到了这一步全部配置的都已经完成,可以直接上传代码啦

image-20241217111057568

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值