制作和发布插件指南
uni-app生态中有一个活跃的插件市场(https://ext.dcloud.net.cn/),提供插件计价销售、广告解锁、赞助和评价等机制。
为什么提交插件
- 分享与受益:当开发出通用功能模块时,可以分享给其他有相同需求的人,形成人人贡献、人人受益的良性循环。
- 物质回报:通过赞赏、广告分成或计费销售,获得经济收益。值得注意的是,只有uniCloud插件和App原生或UTS插件支持付费设置,其他类型插件不能直接定价。
- 荣誉收获:插件的下载量、评星和排行能带来社区认可。许多优秀插件作者每月可通过销售获得数万元收入。
关于插件变现的详细信息,可参考官方文档。
插件制作注意事项
uni插件本质上是uni-app项目的一部分代码,提交时需遵循以下规范:
- 目录规范:确保插件包结构正确,特别是插件ID的确定。插件包中不应包含unpackage目录,尽量避免包含node_modules目录,并移除版本控制相关文件(如.git、.svn等)。
- 前端风格统一:建议使用SCSS预处理,并引用uni.scss中的变量定义,以保持插件风格一致,方便使用者组合开发。
- 插件ID命名规则:
- 格式为“作者ID-插件英文名称”,例如“xiaoming-abc”。作者ID和插件名称只能包含英文和数字。
- 作者ID由作者自定义,不能使用“DCloud”、“uni”等关键字,且长度至少2位字符。
- 插件名称应直观表达功能,如“eshop”、“button”等。
从HBuilderX 3.1起,引入了uni_modules模块化方案,建议插件作者先在项目中创建uni_modules进行本地开发调试,然后直接提交发布到插件市场。
插件市场包含多种插件类型,分类介绍如下:
前端组件
前端组件指使用Vue/Nvue/Wxml等技术开发的、用于页面内嵌的组件,进一步细分为Vue组件、Uvue组件、Nvue组件和小程序自定义组件(不包含UTS原生组件)。目录结构要求以插件ID为根目录,包含组件文件。若组件依赖其他三方组件,需将依赖一起打包上传。
小程序组件的一级目录名称需从“components”改为“wxcomponents”,其他结构相同。组件中不能包含根目录的manifest.json、pages.json、App.vue、main.js等文件。
付费前端插件
HBuilderX 4.19起,DCloud提供了云编译手段来保护前端插件的知识产权。插件作者可设置加密,使用者下载到加密版本,在运行或发行时,加密插件会发送到云端编译,结果混入本地工程,从而实现源码保护。
付费插件分为普通授权版和源码授权版,均绑定唯一的appid和包名。加密仅支持uni-app x下uni_modules形式的、符合easycom规范的组件,可在全平台(包括Web和App端)加密。
开发注意事项:
- 仅支持uni-app x项目,需HBuilderX 4.19+。
- 不支持混搭utssdk目录、页面加密,仅支持easycom组件。
- 插件需在根目录index.uts中导出方法或类型,使用者不能直接引入内部文件。
- 插件不能引入项目内其他目录资源,需通过API让使用者传入数据。
使用注意事项:
- 首次运行或发行时需联网,HBuilderX账号需具备插件使用权限。云端编译成功后缓存本地,更新插件或清除缓存会重新触发编译。
- 只能导入插件根目录,例如
import { test } from '@/uni_modules/test-components'。
uni-app前端模板
Vue/Nvue 页面模板
页面模板的目录结构要求包含页面文件和相关资源。若依赖其他组件,需一起打包。从HBuilderX 3.5.0+起,插件导入时支持自动合并页面路由到项目的pages.json。
uni-app前端项目模板
项目模板需满足uni-app目录结构要求,包含manifest.json文件(不能有appid),不包含unpackage目录。若涉及uniCloud云函数,应选择“前后一体项目模板”,否则删除uniCloud相关目录。
JS SDK
对目录结构无特殊要求,只需将JS文件命名为插件ID,如“xiaoming-md5.js”。不能包含根目录的manifest.json等文件。非uni_modules的JS SDK会被下载到项目根目录的js_sdk目录。
UTS插件
UTS插件用于原生扩展uni-app能力,开发详见官方文档。付费插件同样分为普通授权版和源码授权版,加密规则如下:
- 加密除interface.uts外的所有UTS文件。
- 加密utssdk/app-android及utssdk/app-ios目录下的Java、Kotlin、Swift等混编文件。
试用期仅支持打包自定义基座,正式发布需购买授权。加密插件只支持云端传统打包,需HBuilderX 3.7.2+,从HBuilderX 4.81起支持鸿蒙平台。
UTS插件与App原生语言插件功能重叠,但UTS插件更简单、清晰,更新免审核,支持多版本和源码计费,是未来的推荐方向。
App原生语言插件
需使用Android/iOS原生环境开发,参考官方教程。压缩包格式要求根目录为插件ID,子目录为ios、android及package.json。建议优先开发UTS插件替代。
HBuilderX插件
这是安装在HBuilderX工具中的编辑器插件,开发教程详见官网。
uniCloud
云函数模板
插件包需从项目根目录开始包含云函数目录,如uniCloud/cloudfunctions/cf123。入口文件必须为index.js。付费插件需在package.json的uni_modules->encrypt中配置加密文件,DCloud市场自动加密。
试用期加密云函数可运行,过期失效。购买普通授权版后云函数可正常运行但源码不可见,源码授权版可获得全部源码。
云端一体页面模板
如果是非uni_modules,只能包含一个页面;uni_modules可包含多个页面。命名需包含插件ID前缀,避免与项目代码冲突,不能包含根目录的manifest.json等文件。
前后一体项目模板
与前端项目模板结构基本一致,但必须包含uniCloud相关目录(如uniCloud-aliyun)。
uniCloud admin 插件
基于uniCloud admin框架开发,插件市场选择“Admin插件”分类,详见开发指南。
DB Schema及验证函数
需包含uniCloud-aliyun/database或uniCloud-tcb/database目录,用于提交数据表schema和校验函数。
pages_init
相关文档已迁移至uni_modules文档。
注意事项
- uni-app原生SDK及Web项目分类下的插件发布后需审核生效。
- 插件不能自行下架,如需下架请联系DCloud。也可将标题改为“已废弃”由管理员处理。
- 非uni_modules插件压缩包需为标准ZIP格式,避免使用非主流压缩软件。