uview放在主包太大,如何放到分包,并且可以在主包正常使用

由于主包太大,一直想办法解决,其中由于使用了uview组件,使得主包体积更大。我一直都没有找到非常完善的方法,有些说按需引入可以解决,或者尽量减少引用组件等,但由于我主包实在太大,经过不断的尝试,由此得出以下算是大大解决的方法,因此记录下来方便大家作为参考,对你有帮助的话点个👍哇~~

1、使用npm下载uview

// 如果您的项目是HX创建的,根目录又没有package.json文件的话,请先执行如下命令:
// npm init -y

// 安装
npm install uview-ui@1.8.8

// 更新
npm update uview-ui

2、创建分包目录

在项目根目录下创建一个分包目录,例如subpackage

3、移动uView文件

将uView的相关文件从主包的uni_modules/uview-ui目录移动到分包目录中,例如subpackage/uview-ui

4、配置分包

app.json文件中配置分包信息。找到subPackages字段,添加分包的路径和名称,例如:

"subPackages": [
  {
    "root": "subpackage",
    "pages": [],
  }
]

并且设置preloadRule进行分包预配置

如果想要主包使用分包的资源,那么在调用资源时,要确保已经预加载过分包

    "preloadRule": {
		"pages/index/index": // 页面路径
		// 页面的预下载配置
		{
			"network": "all", // all(不限网络) wifi(仅wifi下预下载)
			"packages": ["subPackages"] // 预下载分包的 root 或 name。__APP__ 表示主包
		}
	},

5、修改uview配置

其实和uview文档配置一样,就是需要修改引用路径

npm安装方式配置 | uView - 多平台快速开发的UI框架 - uni-app UI框架

1. 引入uView主JS库

在项目根目录中的main.js中,引入并使用uView的JS库,注意这两行要放在import Vue之后。

// main.js
import uView from "@/subPackages/uview-ui";
Vue.use(uView);

2. 在引入uView的全局SCSS主题文件

在项目根目录的uni.scss中引入此文件。

/* uni.scss */
@import '@/subPackages/uview-ui/theme.scss';

3. 引入uView基础样式

注意!

App.vue首行的位置引入,注意给style标签加入lang="scss"属性

//在App.vue中
<style lang="scss">
	/* 注意要写在第一行,同时给style标签加入lang="scss"属性 */
	@import "@/subPackages/uview-ui/index.scss";
</style>

4. 配置easycom组件模式

easycom方式引入组件不是全局引入,而是局部引入。

easycom的说明文档👉pages.json 页面路由 | uni-app官网

	//在pages.json中
    "easycom": {
		"autoscan": true,
		"custom": {
			"^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue",//uni-ui
			"^u-(.*)": "@/subPackages/uview-ui/components/u-$1/u-$1.vue"//uview
		}
	},

6、主包使用分包里面的组件

在pages中添加componentPlaceholder占用组件,每一个使用分包的组件都需要配置

具体请看占位组件 | 微信开放文档

	//在pages.json中
    "pages": [{
			"path": "pages/index/index",
			"style": {
				"navigationBarTitleText": "首页",
				"navigationStyle": "custom",
				"componentPlaceholder": {
					"tpl-search-bar": "view",
					"tpl-cate-nav-swiper": "view",
					"u-sticky": "view",
					"u-tabs": "view",
					"u-waterfall": "view",
					"u-lazy-load": "view",
					"u-loadmore": "view",
					"u-back-top": "view",
					"u-badge": "view"
				}
			}
		}]

接着就是每个主包的页面手动引用分包的组件并注册使用

### 如何在 UniApp 中通过正确加载分包组件 在 UniApp 开发中,为了优化小程序的加载性能并减少体积,通常会使用分包机制来分离不同模块的功能。然而,当涉及到需要加载分包内的组件时,需要注意一些特殊的配置和实现方式。 #### 配置分包结构 首先,在 `app.json` 文件中定义分包路径及其对应的页面列表。以下是基本的分包配置示例: ```json { "pages": [ "pages/index/index", "pages/login/login" ], "subpackages": [ { "root": "packageA", // 子根目录 "pages": [ "pages/cat/cat", "pages/dog/dog" ] } ] } ``` 在此配置下,`packageA` 是一个独立的分包含了两个页面:`cat` 和 `dog`[^2]。 --- #### 加载分包组件的方式 由于微信小程序的设计限制,分包之间并不共享资源,因此直接在中通过 `import` 引入分包中的组件可能会导致错误或无法正常渲染[^3]。为了避免这种情况,可以采取以下两种解决方案之一: ##### 方法一:将组件复制到中 如果某个组件既可能被也可能被分包调用,则建议将其放置于公共目录(如 `/components/`),并通过统一路径引入该组件。这样无论是在还是分包中都可以正常使用。 例如: 假设有一个通用按钮组件 `commonButton.vue`,它既可以用于也可以用于分包。此时可按如下方式进行设置: 1. 将组件存放到项目的全局组件目录下(如 `/components/commonButton/commonButton.vue`)。 2. 在分包中分别注册此组件。 页面示例: ```vue <template> <view class="container"> <common-button text="点击我"></common-button> </view> </template> <script> import CommonButton from '@/components/commonButton/commonButton.vue'; export default { components: { CommonButton } }; </script> ``` 分包页面示例: ```vue <template> <view class="container"> <common-button text="我是来自分包的按钮"></common-button> </view> </template> <script> import CommonButton from '@/components/commonButton/commonButton.vue'; export default { components: { CommonButton } }; </script> ``` 这种方式的优点在于逻辑清晰且易于维护,缺点是增加了重复存储的可能性。 --- ##### 方法二:动态加载分包组件 对于某些特定场景,比如确实需要访问分包内部私有化的组件,可以通过动态加载的方式来完成这一需求。具体做法如下: 1. **确保分包已经声明好** 在 `app.json` 的 `subpackages` 节点中明确定义分包路径以及其含的所有页面。 2. **创建跨通信接口** 使用 Vue 自带的事件总线或者 Vuex 来传递数据至目标分包页面后再触发对应的操作。 3. **利用异步组件加载技术** 借助 JavaScript 动态加载能力,可以在运行时请求所需的目标组件实例化对象。 代码示例: ```javascript // main.js 或者任意初始化脚本位置 Vue.component('dynamic-component', () => import('./path/to/subPackageComponent')); ``` 随后便可在模板里像常规标签一样书写 `<dynamic-component></dynamic-component>` 即可[^4]。 注意这种方法虽然灵活但相对复杂度较高,需谨慎评估实际业务适用性。 --- ### 总结 无论是选择静态拷贝公用组件到合适的位置供双方共同消费;亦或是借助现代前端框架特性实现实时获取远程依赖项,都能有效解决因架构隔离带来的不便之处。最终选取哪种方案取决于项目规模大小、团队协作习惯等因素综合考量得出结论。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值