惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
IT之家
IT之家
MongoDB | Blog
MongoDB | Blog
博客园_首页
S
SegmentFault 最新的问题
H
Help Net Security
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
T
The Blog of Author Tim Ferriss
量子位
GbyAI
GbyAI
M
MIT News - Artificial intelligence
Recorded Future
Recorded Future
P
Privacy & Cybersecurity Law Blog
B
Blog
月光博客
月光博客
博客园 - 聂微东
Vercel News
Vercel News
罗磊的独立博客
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Stack Overflow Blog
Stack Overflow Blog
T
Threat Research - Cisco Blogs
Blog — PlanetScale
Blog — PlanetScale
L
Lohrmann on Cybersecurity
I
Intezer
小众软件
小众软件
T
The Exploit Database - CXSecurity.com
Jina AI
Jina AI
C
Check Point Blog
AWS News Blog
AWS News Blog
C
Cisco Blogs
Martin Fowler
Martin Fowler
The Last Watchdog
The Last Watchdog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
宝玉的分享
宝玉的分享
S
Security Affairs
大猫的无限游戏
大猫的无限游戏
N
News and Events Feed by Topic
雷峰网
雷峰网
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hacker News: Front Page
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog

Web前端之家

自然排名和竞价排名到底是什么? - Web前端之家 网站SEO关键词布局,不堆砌不滥用,要怎么做才算对? - Web前端之家 怎么判断关键词竞争度和优化难度?SEO新手从这7步走准没错 - Web前端之家 想做冷门小生意但没曝光?新手怎么高效做冷门行业关键词挖掘与拓展? - Web前端之家 很多人都用错的H1-H6标签,真正的用法是什么?SEO和阅读体验双提升的技巧都在这! - Web前端之家 导航优化,不只是改几个菜单名字这么简单?怎么同时搞定搜索引擎的眼缘和普通访客的便捷感? - Web前端之家 跳出率和页面停留时间为什么重要?真的会影响排名吗? - Web前端之家 单页面真的适合做SEO吗?会不会天生比多页面网站弱? - Web前端之家 网站百度/谷歌等主流引擎抓取异常怎么办?5步快速排查到核心问题附12个实用解决技巧 - Web前端之家 JS渲染的网站怎么做SEO优化?202X实用避坑指南 - Web前端之家 垃圾外链到底有啥危害?新手站长怎么彻底清理干净? - Web前端之家 怎么做SEO才能快速涨粉获流量? - Web前端之家 先搞懂,百度沙盒期到底是什么?不是所有不收录没排名都是它的锅 - Web前端之家 先别急着改内容改链接——精准查降权原因才是关键 - Web前端之家 如何利用重力感应API开发手机游戏? - Web前端之家 为什么很多新手一开始做博客SEO就没效果?踩了这3个雷区 - Web前端之家 做SEO怕踩雷?202X最新违规SEO操作黑名单曝光,看完直接拉黑这些招! - Web前端之家 网站被黑后SEO能恢复吗?大概要多久?具体怎么一步步做? - Web前端之家 小程序SEO的核心平台是哪个?不是外部搜索引擎? - Web前端之家 企业官网怎么做SEO优化才能快速有排名和精准流量? - Web前端之家 为什么做SEO一定要先扎进行业里?基础套路为什么不灵了? - Web前端之家 做宠物殡葬服务的垂直行业SEO,应该怎么规划才能快速获客转化? - Web前端之家 网站遭遇恶意竞争SEO怎么办?2024年全链路实用防范+止损指南 - Web前端之家 第一问,SEO流量转化的前置条件是什么?先别改落地页,看这三点 - Web前端之家 2026年SEO还值得做吗?重点要抓哪些新东西? - Web前端之家 为什么选择WebSocket来做实时聊天室? - Web前端之家 如何修复类似电子商务产品页面上的薄内容? - Web前端之家 如何用History API实现无刷新路由跳转? - Web前端之家
小程序app.json的usingComponents咋用?从基础到进阶全解析 - Web前端之家
2026-07-22 · via Web前端之家

json的usingComponents咋用

不少刚开始做小程序开发的同学,打开APP.json看到usingComponents配置项时,总会犯嘀咕:这玩意儿到底是干啥的?配置错了页面组件咋就不显示?今天咱就把usingComponents从基础用法到进阶技巧,拆碎了讲明白。

usingComponents是干啥的?先搞懂基础定位

很多人刚接触时会问:“小程序不是本身有内置组件吗?为啥还要用usingComponents?”其实啊,usingComponents是微信小程序(包括其他平台小程序,像支付宝、字节系逻辑类似)里全局注册自定义组件的配置入口。

小程序开发分“内置组件”(比如<view><button>这些官方提供的)和“自定义组件”(自己写的或第三方封装的,像轮播组件、弹窗组件),usingComponents的作用,就是把你写的自定义组件或者引入的第三方组件,在全局层面做注册,这样所有页面、子包页面想用这些组件时,不用在每个页面的JSON里重复注册,直接写标签就能用。

举个例子:你做了个全局通用的顶部导航组件<my-nav>,如果不在app.JSon的usingComponents里注册,每个页面的json都得单独写"my-nav": "/components/my-nav/my-nav",但用了全局注册后,只需要在App.json配一次,所有页面直接能用<my-nav>标签,省了大量重复代码。

配置usingComponents要注意啥规则?

知道是干啥的后,“配置格式咋写?路径错了为啥组件不显示?”这类问题就很实际了。

基本配置格式

app.json里的usingComponents是个对象,键是组件标签名(自己定义,要符合小程序标签命名规则,比如全小写、多单词用中划线分隔,像my-headergoods-card),值是组件所在的相对路径(从项目根目录开始算)。

举个正确配置例子:

{
  "usingComponents": {
    "my-nav": "/components/nav-bar/nav-bar",
    "van-button": "/miniPRogram_npm/vant-weapp/button/index"
  }
}

这里"my-nav"是自己写的组件,路径指向components文件夹下的nav-bar组件;"van-button"是引入vant Weapp第三方UI库按钮组件,路径要对应到npm包的组件入口。

路径陷阱:绝对路径VS相对路径

小程序里配置组件路径时,必须用绝对路径(以开头,代表项目根目录),要是写成相对路径,比如"my-nav": "../components/nav-bar/nav-bar",在不同页面引用时就会因为相对位置变化导致找不到组件,直接报“组件未找到”的错误。

命名冲突咋避免?

如果全局注册的组件标签名,和页面自己注册的(页面json里的usingComponents)重名了,页面级的会覆盖全局级的,所以命名时建议加前缀区分,比如公司项目统一用“company-xxx”,第三方库用“van-xxx”(vant)、“mp-xxx”(weUI),减少冲突概率。

哪些场景必须用usingComponents?

理解规则后,得知道“啥时候非得用全局注册?不用行不行?”

全局通用组件:一次注册,处处能用

像顶部导航栏、底部tab栏、全局弹窗这些,每个页面都要用到的组件,必须全局注册,比如电商小程序的底部TAB(首页、购物车、我的),如果每个页面json都写一遍配置,不仅麻烦,后期改Tab样式时要改N个页面的配置,用全局注册只改app.json里的路径和组件代码就行。

第三方ui库集成:高效复用成熟组件

现在做小程序很少自己写所有组件,像Vant Weapp、colorUI、WeUI这些第三方库,都需要在app.json的usingComponents里注册核心组件,比如Vant的Toast、Dialog这些基础组件,全局注册后,页面里直接<van-toast />就能调,不用每个页面单独配。

业务模块组件:团队协作更高效

团队开发时,产品详情、订单卡片这类业务组件,由专人开发后,全局注册能让所有页面开发同学直接调用,不用关心组件路径和内部逻辑,比如写了个<order-card>组件,市场、订单、个人中心页面都要展示订单信息,全局注册后大家直接用,减少沟通成本。

配置完没效果?这些坑要避开

很多人配置后发现“组件还是不显示?控制台一堆报错?”,大概率踩了这些坑:

组件本身没写对:json、wxml、js结构不全

自定义组件必须有自己的json(声明"component": true)、wxml(模板结构)、js(Component({...})定义),如果组件文件夹里少了这些文件,哪怕usingComponents配置对了,也会报“组件定义错误”。

比如你建了个my-nav组件,只写了my-nav.wxmlmy-nav.js,但没写my-nav.json,里面没声明"component": true,小程序就不认这是个组件,注册了也没用。

路径写错:多一个斜杠、少一个文件夹

比如组件实际在/components/nav/nav.wxml,但配置成了"/components/nav-bar/nav",路径对应不上,小程序找不到组件文件,会报“找不到组件定义”的错误,建议配置时,直接复制组件文件夹的路径,避免手敲出错。

样式隔离导致样式不生效

小程序自定义组件默认开启样式隔离(styleIsolation: 'isolated'),如果全局注册的组件想复用页面的样式,得在组件json里改styleIsolation"apply-shared"或者"shared",不然你在页面写的样式,组件里用不了,容易误以为是注册失败。

子包组件的全局注册限制

如果组件放在子包(subpackages)里,全局注册时路径要包含子包名,比如子包叫packageA,组件在packageA/components/my-sub-component里,那配置路径得是"/packageA/components/my-sub-component/my-sub-component",否则子包外的页面引用时会找不到组件。

进阶玩法:让usingComponents更高效

掌握基础后,“怎么优化组件加载?能动态注册吗?”这些进阶问题就值得研究了:

结合 subcontract(子包)实现按需加载

如果全局组件很多,全塞在主包会让主包体积过大,影响首屏加载速度,可以把非首屏要用的全局组件,放到子包里,然后在app.json的usingComponents里正常配置路径(包含子包名),小程序编译时,会自动处理子包的懒加载,用户进入用到该组件的页面时,才会加载子包代码,减少主包体积。

动态注册组件:根据场景切换

虽然app.json是全局静态注册,但可以结合页面的json配置实现“动态覆盖”,比如首页需要特殊的头部组件,就在首页的json里单独注册一个<my-nav>,覆盖全局的<my-nav>,实现不同页面用不同版本的组件。

性能优化:组件懒加载思路

对于像图表、富文本这些体积大的第三方组件,不要一股脑全注册到app.json里,可以只注册核心组件,其他组件在页面onload时,用wx.dynamicimportComponent动态引入(不过这个API更适合页面级,全局注册还是以静态为主,这里是思路延伸),或者把大组件拆分成子包,结合子包懒加载。

和页面json的usingComponents有啥区别?

最后得搞清楚“全局和页面级注册有啥不一样?啥时候用页面注册?”

app.json的usingComponents是全局注册,所有页面(包括子包页面)都能直接用;而页面自己的json里的usingComponents是页面级注册,只有当前页面能用,而且页面级的会覆盖全局同名组件。

举个场景:全局注册了<my-nav>是通用导航,但个人中心页面需要特殊的<my-nav>(比如加个头像),这时候在个人中心页面的json里注册同名的<my-nav>,指向个人中心专属的组件路径,这样个人中心页面用的就是页面级的,其他页面还是全局的,实现差异化。

app.json里的usingComponents是小程序组件化开发的“全局枢纽”,搞懂它的配置规则、应用场景和避坑技巧,能让组件复用更丝滑,项目维护更轻松,下次再配组件时,别再对着app.json发懵啦~

(PS:如果是支付宝小程序、抖音小程序,usingComponents的逻辑和微信小程序基本一致,只是平台API细节有差异,核心思路通用~)

温馨提示:本文作者系Terry ,经Web前端之家编辑修改或补充,转载请注明出处和本文链接:
https://www.jiangweishan.com/article/xiaochegnxxusdf.html