尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
uni-app 的 uni_modules 插件规范:从目录结构、package.json 配置到插件开发与发布全指南
uni-app 的 uni_modules 插件规范从目录结构、package.json 配置到插件开发与发布全指南【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址: https://gitcode.com/gh_mirrors/un/uni-app导读uni_modules是 uni-app 官方提供的「大一统」包管理方案HBuilderX 3.1.0 支持它把组件、JS/uts 库、页面、uniCloud 云函数乃至整个项目都收纳为一种标准模块同时兼容 npm、Android 仓储aar、iOS CocoaPodsframework与鸿蒙 ohpm。本文以 docs/plugin/uni_modules.md 为骨架结合本仓库中真实的 uts 插件实现examples/hello-uts/uni_modules/uts-getbatteryinfo系统讲解 uni_modules 的设计动机、目录规范、package.json 全量配置含 HBuilderX 4.71 平台兼容性改版、摇树配置、pages_init.json页面自动注册、以及插件的创建、发布、更新与旧插件迁移全流程。读完本文你将具备完整的 uni_modules 插件开发与发布实战能力。什么是 uni_modules主流语言与平台都有各自的包管理方案JS 有 npm/yarn/pnpmAndroid 有仓储MaveniOS 有 CocoaPods鸿蒙有 ohpmdart 有 pub。而 uni-app 是「大一统」开发框架覆盖客户端Web、Android、iOS、各家小程序与 uniCloud 服务器端还支持直接调用 npm 库、Android 仓储里的 aar、iOS CocoaPods 里的 framework、鸿蒙的 ohpm——甚至 uts 语言本身可以编译为 js、kotlin、swift、ArkTS。因此 uni-app 需要一套能容纳所有上述场景的大一统包管理方案这就是uni_modules。它是一种「海纳百川型」的设计不管是 js/uts 库、组件、页面、uniCloud 云函数、公共模块的封装甚至是整个项目都可以封装成一个uni_modules类似 Android 的 aar不管是 npm、Android 仓储、iOS CocoaPods、鸿蒙 ohpm都可以纳入uni_modules中。由于 uni-app 有自己的项目目录结构规范可以简单理解为把一个项目的各类工程目录整体挪到一个uni_modules目录下、打包成一个模块只要符合 uni-app 规范的文件都可以放进其中。详细的 uni_modules 目录结构见下文「目录结构」一节。uni_modules 的优势uni_modules 支持在 DCloud 插件市场计费销售由 DCloud 提供商业插件的代码加密和版权保护HBuilderX 提供了对uni_modules的便捷管理对一个 uni_modules 右键项目型 uni_modules 则对根目录的 package.json 右键可直接上传、更新、安装依赖版本更新时还会给出新旧代码的详细对比。与插件市场以往的普通插件相比uni_modules 的优势在于支持在 HBuilderX 里直接发布、更新、删除无需在 Web 界面操作支持依赖在 package.json 中配置插件文件位置统一。以往下载一个插件不知道给工程多少个目录写入了多少个文件这种困惑不再存在删除插件时也可以一处统一删除。有了 node_modules为什么还要 uni_modulesnode_modules不满足全平台包管理需求无法容纳 Android 仓储、iOS CocoaPods、鸿蒙 ohpmnode_modules不满足「云端一体」的需求。uniCloud 的云函数、公共模块、schema 和前端部分无法在node_modules模式下有效融合而很多组件是云端一体组件既有客户端又有服务器需要按 uni-app 的目录规范放置uni_modules有付费和商业插件DCloud 插件市场提供了版权保护而node_modules不支持付费和版权保护node_modules层层嵌套node_modules造成数量惊人的文件数目。uni_modules支持依赖但不支持 module 嵌套鼓励开发者优化包体积这算差异并非优势uni_modules在 js 支持的平台上同时容纳了node_modules并不排斥。除了发布插件uni_modules同时也是一种大型工程的模块分割方案。例如一个旅游应用可以把机票、酒店、火车票、自由行等模块分拆成不同的uni_modules交由不同部门并行开发。uni_modules 目录结构项目插件的 uni_modules如果 uni_modules 插件是「项目类型」的插件只需要在项目根目录下放一个符合 uni_modules 规范的package.json即可。右键点击这个 package.json即可对这个项目插件进行更新、或发布到插件市场例如 uni-admin、uni-starter 这类项目型插件都通过这种方式更新。非项目插件的 uni_modules如果是非项目类型的插件组件、js sdk、页面模板、云函数等则需要放置在项目的uni_modules目录下。此时uni_modules目录下的目录结构和 uni-app 的项目结构是一致的如下uni_modules 项目根目录下 └── [plugin_id] // 插件 ID ├── uniCloud 插件内的uniCloud内容会被虚拟合并到项目根目录的uniCloud中注意插件内的uniCloud目录没有-aliyun,-tcb后缀 ├── components 符合vue组件规范的uni-app组件目录支持easycom规范 ├── utssdk 存放uts插件 ├── hybrid 存放本地网页的目录 ├── pages 业务页面文件存放的目录 ├── static 存放应用引用静态资源如图片、视频等的目录注意静态资源只能存放于此 ├── wxcomponents 存放小程序组件的目录 ├── license.md 插件使用协议说明 ├── package.json 插件配置必选除此之外均可选 ├── readme.md 插件文档 ├── changelog.md 插件更新日志 ├── menu.json 如果是uniCloud admin插件可以通过menu.json注册动态菜单也就是说uni_modules目录下相当于复制了一份 uni-app 的项目结构。本仓库的 src/uni_modules 目录正是这种结构的真实范例其中包含uni-actionSheet、uni-camera、uni-network等大量插件每个插件目录下都遵循「插件 ID → 各类标准子目录 package.json」的规范。Tips插件目录不支持pages.json、App.vue/uvue、main.js/uts、manifest.json、uni.scss文件。如果需要插件使用者修改这些文件内容请在插件文档readme.md中详细说明插件目录支持pages_init.json可以方便注册页面到项目的 pages.json 中见下文「pages_init 页面注册」在插件内部引用资源、跳转页面时请尽量使用相对路径插件内 components 目录同样支持 easycom 规范插件使用者可以直接在项目中使用插件内符合 easycom 规范的组件当项目或插件内存在 easycom 组件冲突时编译时会给予提示可以通过修改组件目录及组件文件名称来解决冲突。在 HBuilderX 中uni_modules下如果包含 uniCloud 目录的内容会被以「引用」的方式显示到主项目根目录下的 uniCloud 中此时文件前的图标左下角会显示一个快捷方式箭头。例如项目中有一个名为uni-config-center的 uni_modules它下面包含名为uni-config-center的公共模块那么在项目根目录的公共模块目录 common 下也会多出一个uni-config-center。在 HBuilderX 中打开带有引用图标指示的文件会打开其原始地址。uts 插件在 uni_modules 的utssdk目录下可以放置 uts 插件。uts 插件是非常重要的一种跨端插件它支持 API 插件和组件插件可通过原生能力封装后给 uni-app (x) 扩展 API 和组件。在 utssdk 目录下可以新建app-android、app-ios、app-harmony、web、mp-weixin等目录每个目录下存放不同客户端平台的专用代码在 app-android、app-ios、app-harmony 目录可以放置 Android 原生的 aar、so 库iOS 原生的 framework鸿蒙的 har也支持配置 Android 仓储、iOS 的 CocoaPods、鸿蒙的 ohpm在 web 和 mp 目录下也支持放置 npm 库。虽然 utssdk 目录下有这么多平台专用目录但 utssdk 的根目录下可以放置一个interface.uts声明文件。这个文件统一了不同平台的接口把不同平台的原生能力转换为统一的 API 或组件提供给前端开发者使用——这是非常重要的设计也是 uni-app 区别于其他跨平台工具的重要特色。以获取电量的 APIuni.getBatteryInfo()为例根目录的 interface.uts 中定义 API 的对外暴露接口和统一错误码然后在各个客户端平台的目录中实现电量获取。本仓库 examples/hello-uts/uni_modules/uts-getbatteryinfo 正是这个电池电量插件的完整实现可以看到其 utssdk 目录下同时存在app-android/、app-ios/、mp-alipay/、mp-baidu/、mp-qq/、mp-weixin/、web/以及根目录的interface.uts根目录 interface.uts 定义了统一接口GetBatteryInfoResult含 errCode、errSubject、errMsg、level、isCharging、UniErrorT、GetBatteryInfoOptionssuccess/fail/complete 回调以及导出的getBatteryInfo(options)函数签名并注释了错误码语义0 成功、1001 getAppContext is null、1002 navigator.getBattery is unsupportedAndroid 平台实现 utssdk/app-android/index.uts 通过UTSAndroid.getAppContext()获取应用上下文再调用BatteryManager.BATTERY_PROPERTY_CAPACITY读取电量 level并通过Intent.ACTION_BATTERY_CHANGED广播判断isCharging充电状态成功时回调success与complete失败时回调fail与complete——这完整印证了「interface.uts 统一声明 各平台原生实现」的 uts 插件架构。注意事项使用import导入 uts 插件时仅支持导入到插件根目录不支持导入插件内部的文件// 正确的写法 import { test } from /uni_modules/uts-osapi; // 错误的写法 import { test } from /uni_modules/uts-osapi/index.uts;更详细的 uts 插件开发指南可参见仓库内 docs/plugin/uts-plugin.md 与 docs/plugin/uts-component.md。在 HBuilderX 中使用 uni_modules 插件下载 uni_modules 插件在 DCloud 插件市场查找 uni_modules 插件在插件详情页右侧查看该插件是否支持 uni_modules点击「使用 HBuilderX 导入插件」选择要导入的 uni-app 项目。Tipsuni_modules 支持组件 easycom使用者可以直接使用插件内符合 easycom 规范的组件其他资源如图片、js 等在项目中可以直接按目录结构引入使用例如import {test} from /uni_modules/xx-yy/js_sdk/test.js如果是加密插件加密文件不支持单独对外导出即不能使用import语句直接导入插件内的某个加密文件uts 加密插件导入插件根目录即可uni-app 项目下 uts 插件不支持导入非 utssdk 以外的 uts 文件uts 插件 utssdk 内的文件、以及这些文件引入的非 utssdk 内的 uts 文件均不支持单独对外导出如果要使用 uni_modules 中的页面见下文「pages_init 页面注册」。安装 uni_modules 插件依赖导入插件时HBuilderX 会自动安装当前插件的所有三方依赖也可以在插件目录右键手动执行「安装插件三方依赖」。更新 uni_modules 插件可以通过插件目录右键「从插件市场更新」检查更新当前所使用的插件对比插件确认更新内容HBuilderX 会给出新旧代码的详细对比。卸载 uni_modules 插件uni_modules 插件目录是独立存在的如果不再需要该插件可以直接删除该插件目录实现一处统一删除。Tips导入 uni_modules 规范插件需要使用 3.1.0 以上版本的 HBuilderX。uni_modules 的插件配置如果你是插件作者需要了解 uni_modules 的配置如果只是使用者可无需关心本章节。package.jsonpackage.json 在每个 uni_modules 插件中都必须存在包含插件的基本信息。其中有些配置仅在发布到插件市场时需要如果插件不对外发布相关字段可忽略。注意平台兼容性相关配置有变更需区分 HBuilderX 版本。平台兼容性改版HBuilderX 4.71为更好地区分 uni_modules 插件对各平台的支持从HBuilderX 4.71起平台兼容性针对uni-app及uni-app x两个维度做了拆分对各平台的定义做了调整并新增了「多语言」「暗黑模式」「宽屏模式」的定义具体规范变更如下{ // ...... engines: { // HBuilderX/cli 最低兼容版本 HBuilderX: ^3.1.0, uni-app: ^4.1.0, // 新增支持的uni-app 版本 uni-app-x: ^4.2.0 // 新增支持的uni-app x版本 }, dcloudext: { // ...... darkmode:x, // 新增暗黑模式 i18n:√, // 新增多语言 widescreen:√, // 新增宽屏模式 }, uni_modules: { // ...... platforms: { // 平台兼容性废弃原y(Yes)、n(No)、u(Unknown)的规范调整为: √ 表示支持x 表示不支持- 表示不确定默认为 - cloud: { tcb: √, aliyun: √, alipay: x }, client: { // 前端平台兼容性下增加“uni-app”、“uni-app-x”两个节点兼容性数据分别放在两个节点下 uni-app: { // uni-app vue: { // 调整改为全小写 vue2: -, vue3: - }, web: { // 新增移除了之前的“H5-mobile”和“H5-pc” safari: -, chrome: - }, app: { // 调整改为全小写 vue: -, // 调整去掉app-前缀 nvue: -, // 调整去掉app-前缀 android: { minVersion: 5.0, extVersion: 1.1.0 // 新增支持此平台的插件版本 }, ios: -, harmony: - }, mp: { // 小程序调整键由中文改为英文全小写 weixin: -, alipay: -, toutiao: -, baidu: -, kuaishou: -, jd: -, harmony: -, qq: -, lark: - }, quickapp: { // 快应用调整键由中文改为英文全小写 huawei: -, union: - } }, uni-app-x: { // uni-app x web: { // 新增移除了之前的“H5-mobile”和“H5-pc” safari: -, chrome: - }, app: { // 调整改为全小写 android: { minVersion: 5.0, extVersion: 1.1.0 // 新增支持此平台的插件版本 }, ios: -, harmony: - }, mp: { // 小程序调整键由中文改为英文全小写 weixin: - } } } } } }平台兼容性规范改版后使用 HBuilderX 4.71 之前的版本发布到 DCloud 插件市场时插件市场会自动将平台兼容性转换为新版规范以做兼容。为了有更准确的平台兼容性设置建议升级到 HBuilderX 4.71 后再操作发布。除了以上变更外其余配置与 HBuilderX 4.71 之前版本一致。HBuilderX 4.71 之前版本的完整规范如下{ // 注意不能直接拷贝本段代码到编辑器中package.json 目前不支持注释。本段代码加的注释只是用于解释代码。 id: 作者ID-插件英文名称, // 必填插件ID格式为作者ID-插件英文名称例如xx-yy其中作者ID和插件名称只能包含英文、数字作者ID不能使用DCloud、uni等关键字 displayName: 插件显示名称, // 必填用于展示在插件市场的显示名称 version: 1.0.0, // 必填插件版本 description: 插件描述, // 必填插件描述 keywords: [], // 必填插件标签关键词最多5个 repository: github:user/repo, // 仓库地址 engines: { // HBuilderX/cli 最低兼容版本 HBuilderX: ^3.1.0 }, dcloudext: { // DCloud插件市场配置 category: [前端组件, 通用组件], // 可选HBuilderX低于3.6.0时必填 插件市场分类 type: component-vue, // 必填HBuilderX 3.6.0 以上支持插件市场分类标识分类标识可以参考下边列出的表格 sale: { // 销售 目前仅限uniCloud类插件 regular: { // 普通授权版价格单位为元如果为免费插件设置普通授权版价格为 0 即可。 price: 0.00 }, sourcecode: { // 源码授权版价格单位为元 price: 0.00 } }, contact: { // 插件作者 QQ方便管理员审核时与作者快速沟通。 qq: }, declaration: { // 隐私、权限及商业化声明 ads: , // 必填本插件是否包含广告如包含需详细说明广告表达方式、展示频率请如实填写如不包含可填“无” data: , // 必填本插件采集的数据、发送的服务器地址、以及数据用途说明请如实填写如不采集任何数据可填写“插件不采集任何数据”如果使用的三方SDK需要采集数据可填写“插件使用的 XX SDK会采集数据详情可参考https://other-sdk.com/ permissions: // 必填本插件需要申请的系统权限列表请如实填写如不需要任何权限可填“无” }, npmurl: // npm 地址 }, uni_modules: { // uni_modules配置 scripts: { init: node scripts/init.js // 新增于 HBuilderX 3.6.7初次安装此插件时执行如果一次安装多个插件及依赖会在所有插件安装完毕执行 }, dependencies: [], // 依赖的 uni_modules 插件ID列表如 [plugin-id-1, plugin-id-2] 表示当前插件依赖 plugin-id-1、plugin-id-2 两个插件 encrypt: [ // 配置云函数公共模块clientDB Action加密 uniCloud/cloudfunctions/uni-admin/controller/permission.js // 注意这里是真实的文件路径uni_modules下的uniCloud不带-aliyun、-tcb后缀但是项目根目录下的uniCloud是带有后缀的 ], // 平台兼容性当前规范仅针对HBuilderX 4.71以前的版本从HBuilderX 4.71起规范有调整详见上方“平台兼容性改版”相关说明 platforms: { // 平台兼容性y 表示 Yes支持n 表示 No不支持u 表示 Unknown不确定默认为 u cloud: { // 云端平台兼容性 tcb: y, aliyun: y }, client: { // 前端平台兼容性 App: { app-vue: y, app-nvue: n }, H5-mobile: { Safari: { // 当需要指定最小版本才支持时可以配置minVersion minVersion: 14.0.2 }, Android Browser: y, 微信浏览器(Android): u, QQ浏览器(Android): u }, H5-pc: { Chrome: y, IE: u, Edge: u, Firefox: u, Safari: u }, 小程序: { 微信: y, 阿里: y, 百度: y, 抖音: y, QQ: y }, 快应用: { 华为: u, 联盟: u } } }, treeShaking: { //摇树配置 app: { android: true, //Android平台需要摇树 ios: true, //iOS平台需要摇树 harmony: false //鸿蒙平台不需要摇树 }, web: false //Web平台不需要摇树 } } }Tips上述配置基于 npm package.json 规范扩展故标准的 package.json 属性也同样支持比如可以通过files来控制要上传的插件包内容插件市场分类标识对应package.json - dcloudext - type一级分类二级分类type前端组件通用组件component-vue前端组件小程序组件component-mpJS SDK通用 SDKsdk-jsuts插件API插件utsuts插件uni-app兼容模式组件component-utsuts插件标准模式组件uts-vue-componentuni-app前端模板前端页面模板uniapp-template-pageuni-app前端模板uni-app前端项目模板uniapp-template-projectuniCloud云函数模板unicloud-template-functionuniCloud云端一体页面模板unicloud-template-pageuniCloud云端一体项目模板unicloud-template-projectuniCloudAdmin插件unicloud-adminuniCloudDB Schema及验证函数unicloud-database本仓库中的 uts-getbatteryinfo 插件 package.json 就是一份完整的真实示例它声明了id为uts-getbatteryinfo、engines.HBuilderX为^3.6.11、dcloudext.type为utsAPI 插件、sale双版本价格均为 0、declaration声明「无广告 / 插件不采集任何数据 / 无权限」并在uni_modules.platforms中给出了 Vuevue2/vue3、Appapp-android minVersion 21、app-ios minVersion 9、H5-mobile、H5-pc、小程序、快应用等维度的 y/u 兼容性标记以及uni-ext-api.uni: getBatteryInfo的 API 扩展声明——可作为插件作者编写 package.json 的直接参考。摇树配置treeShaking配置模块是否需要摇树true表示需要摇树即项目的代码中使用了该模块时才包含发布时才包含此模块false表示不需要摇树即项目的代码中没有使用也会包含此模块。默认值为true。规范{ uni_modules: { treeShaking: boolean | Recordstring,boolean|Recordstring,boolean } }配置所有平台都不需要摇树{ uni_modules: { treeShaking: false } }按平台分别配置是否需要摇树{ uni_modules: { treeShaking: { app: { android: false, ios: true, harmony: false }, web: false } } }uni_modules.config.jsonuni_modules.config.json位于项目根目录用于配置插件更新后的触发脚本通常用于执行自定义的自动化任务以及插件 uniCloud 支持的服务空间。详细配置说明如下{ scripts: { postupdate: node scripts/upgrade.js, // 更新插件后执行该脚本可从process.env.UNI_MODULES_ID获取当前被更新的插件ID如果存在多个以,隔开 preupload: node scripts/preupload.js, // 上传插件之前执行该脚本可从process.env.UNI_MODULES_ID获取当前被更新的插件ID如果存在多个以,隔开 postupload: node scripts/postupload.js // 上传插件之后(无论上传成功还是失败)执行该脚本可从process.env.UNI_MODULES_ID获取当前被更新的插件ID如果存在多个以,隔开 }, uni_modules: { uni-id: { // 插件ID uniCloud: [aliyun, tcb] // 当项目同时存在aliyuntcb时可手动指定该插件所属的服务空间 } } }Tips当项目内仅关联了一个服务空间时uni_modules插件内的 uniCloud 相关资源会自动归属至该服务空间无需在 uni_modules.config.json 中配置当项目内关联了两个服务空间阿里云和腾讯云同时存在时若未在 uni_modules.config.json 中配置平台则上传该插件 uniCloud 资源时会提示选择上传至哪个服务空间若已在 uni_modules.config.json 中配置平台则上传时以配置为准自动归属至指定的服务空间。npmignoreuni_modules 插件发布到插件市场时通常需要忽略掉一些目录或文件比如unpackage、.hbuilderx、node_modules等这时可以通过.npmignore文件实现忽略。文件名即.npmignore注意开头有个点典型的 npmignore 文件内容如下.hbuilderx unpackage node_modules package-lock.json注意项目根目录下的.npmignore对发布项目、插件模板生效uni_modules/插件Id/.npmignore对发布插件生效。pages_init 页面注册新增于 HBuilderX 3.5.0。过去插件作者提供页面类插件时需要在文档中手动告知使用者在 pages.json 中注册哪些页面例如{ pages:[{ path:uni_modules/xx-yy/pages/demo/demo // 按插件所在目录引入对应的页面 }] }pages_init.json解决了这个烦恼当 uni_modules 插件根目录下存在pages_init.json文件时在插件导入工程时会弹出一个合并页面路由的 pages.json 修改界面插件使用者点击确认按钮即可完成插件页面向项目 pages.json 的注册。示例代码如下问题反馈页面管理员端模板类的插件即采用此方案{ pages: [{ path: uni_modules/uni-feedback-admin/pages/uni-feedback-admin/add, style: { navigationBarTitleText: 新增 } }, { path: uni_modules/uni-feedback-admin/pages/uni-feedback-admin/edit, style: { navigationBarTitleText: 编辑 } }, { path: uni_modules/uni-feedback-admin/pages/uni-feedback-admin/list, style: { navigationBarTitleText: 列表 } } ] }pages 节点的完整参数说明可参见仓库文档 docs/collocation/pagesjson.md。注意pages_init.json文件最终不会导入到工程中pages_init.json暂不支持带注释包括条件编译如果 HBuilderX 版本低于 3.5或插件作者并没有提供pages_init.json那么仍然需要手动编辑 pages.json 注册页面。开发 uni_modules 插件新建 uni_modules 目录在 uni-app 项目根目录下创建uni_modules目录在 HBuilderX 中可以通过项目右键菜单点击「新建 uni_modules 目录」。Tips如果是 vue-cli 项目uni_modules 目录位于src下即src/uni_modules。新建 uni_modules 插件在 HBuilderX 中 uni_modules 目录右键点击「新建 uni_modules 插件」填写正确的插件 ID选择插件分类。插件 ID 命名规范格式为作者ID-插件英文名称示例xx-yy其中作者 ID 和插件英文名称只能包含英文、数字作者 ID 由插件作者自定义不能使用DCloud、uni等关键字长度要求至少 2 位字符插件名称需直观表达插件的作用例如tag、button 等。Tipsuni_modules 插件可以在 package.json 的uni_modules - dependencies节点配置三方依赖依赖的插件也必须是 uni_modules 插件如果是依赖三方 npm 插件可以使用标准的dependencies节点配置。通过uni_modules - dependencies配置三方 uni_modules 插件依赖{ id: uni-badge, displayName: uni-badge 数字角标, version: 1.2.2, description: 数字角标徽章组件在元素周围展示消息提醒一般用于列表、九宫格、按钮等地方。, uni_modules: { dependencies: [uni-scss] } }发布到插件市场插件开发完毕后可以直接发布到插件市场供其他人免费或付费使用插件市场提供了变现、评价等机制。发布流程在 HBuilderX 中插件目录右键点击「发布到插件市场」填写插件信息。Tips如果需要发布为项目模板请在项目根目录创建 package.json然后右键菜单发布到插件市场发布插件时可以选择上传当前项目作为示例工程完整的示例工程可以方便用户快速上手。修改插件基本信息插件发布到插件市场后如果需要调整插件市场上的基本信息如插件中文名称、描述、关键词、readme.md 等可以直接在插件目录右键「修改插件基本信息」在 HBuilderX 中插件目录右键点击「修改插件基本信息」修改插件基本信息并保存。发布新版本当插件增加了新功能或修复了 Bug、需要发布新版本时操作与第一次发布一样可以直接在插件目录右键「发布到插件市场」。Tips在发布窗口中填写的更新日志会自动与根目录的 changelog.md 保持同步。已有插件迁移为 uni_modules 插件指南将插件内容迁移至您的 uni-app 示例项目根目录uni_modules下以插件 ID 命名的目录中。例如已有的插件 ID 为xx-yy则目录结构为uni_modules/xx-yy运行自己的示例项目验证插件迁移目录后所有功能是否正常目录迁移通常会遇到资源引用路径问题尽可能将所有路径引用修改为相对路径如果插件带有 uniCloud 的云函数或数据库迁移时注意插件目录内的 uniCloud 不能带有厂商后缀可以在发布插件时指定插件支持的云服务商插件目录不支持 pages.json、App.vue、main.js、manifest.json、uni.scss 文件如果需要插件使用者修改这些文件内容请在插件文档readme.md中详细说明当迁移后的所有插件功能均正常时即可向插件市场发布新的支持 uni_modules 的插件版本插件市场会同时保留您最后一个非 uni_modules 插件版本在插件根目录创建 package.json可以先简单地仅填写一个插件 ID其他信息可以通过发布窗口填写会自动同步回 package.json{ id:您的插件ID }插件文档迁移至插件根目录的 readme.md 中右键 package.json点击「发布到插件市场」选择分类、填写插件信息尽可能与插件市场已有信息保持一致发布成功后可以在插件市场的插件详情页右侧查看您的插件已同时提供uni_modules版本和非uni_modules版本仅保留最后一个非 uni_modules 版本。小结uni_modules 是 uni-app 生态中「云端一体、全平台兼容、可商业化」的包管理基础设施它以一套统一的目录规范收纳组件、js/uts 库、页面、uniCloud 云函数乃至整个项目通过 package.json 的engines、dcloudext、uni_modules.platforms、treeShaking、dependencies、encrypt等节点完成版本约束、市场展示、平台兼容性声明、摇树优化、依赖管理与云函数加密再配合pages_init.json实现页面路由的免手动注册、.npmignore控制发布内容、uni_modules.config.json挂接自动化脚本与服务空间归属。对于大型工程它还是理想的模块分割方案可将机票、酒店、火车票等业务拆分为独立 uni_modules 由不同团队并行维护。开发者可对照本仓库 examples/hello-uts/uni_modules 下的大量真实插件如 uts-getbatteryinfo、uts-toast、uts-alert 等与 src/uni_modules 下的 uni 官方系列插件快速上手 uni_modules 插件的开发、发布与工程化落地。【免费下载链接】uni-appA cross-platform framework using Vue.js项目地址: https://gitcode.com/gh_mirrors/un/uni-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

修复 IQ1_S_R4 / IQ1_M_R4 量化失败:ik_llama.cpp 中 GGML_ASSERT 崩溃的根因分析与边界处理方案

修复 IQ1_S_R4 / IQ1_M_R4 量化失败:ik_llama.cpp 中 GGML_ASSERT 崩溃的根因分析与边界处理方案

修复 IQ1_S_R4 / IQ1_M_R4 量化失败:ik_llama.cpp 中 GGML_ASSERT 崩溃的根因分析与边界处理方案 【免费下载链接】ik_llama.cpp llama.cpp fork with additional SOTA quants and improved performance 项目地址: https://gitcode.com/GitHub_Trending/ik/ik_lla…

📅 2026/9/19 23:48:56
BabelDOC PDF翻译:从安装到保留格式出结果,只需5分钟

BabelDOC PDF翻译:从安装到保留格式出结果,只需5分钟

BabelDOC PDF翻译:从安装到保留格式出结果,只需5分钟 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC BabelDOC 是一个开源的 PDF 翻译工具。如果你用通用翻译工具翻过 6…

📅 2026/9/19 23:48:56
Arthas stop 命令详解:优雅关闭诊断服务、断开全部客户端并重置增强类

Arthas stop 命令详解:优雅关闭诊断服务、断开全部客户端并重置增强类

Arthas stop 命令详解:优雅关闭诊断服务、断开全部客户端并重置增强类 【免费下载链接】arthas Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas 项目地址: https://gitcode.com/gh_mirrors/ar/arthas Arthas 是一款 Alibaba 开源的 Java 在…

📅 2026/9/19 23:48:56
MORE NEWS

更多资讯

📰

考博英语命题逻辑与量化备考:从题型边界到主观题评分矩阵

简介:PDF文档《博士生入学考试英语备考指南》由清华大学出版社出版,面向报考博士研究生的考生,系统梳理了博士生英语入学考试的核心题型、难度层次与备考要点,既适合首次备考者建立整体认知,也适合考前冲刺阶段查漏补缺…

📰

Cursor 是编程提效工具,Base URL 走 TaoToken 通道行不行

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CC Switch 里 TaoToken 当默认供应商:Qwen3.7 Plus 一键切换

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Windows 11预览功能彻底关闭指南:三层机制深度解析

1. 这个“预览”到底在预览什么?先搞清它的真实身份 很多人一看到文件管理器里点个PDF、点个图片就弹出右侧那个半透明窗格,第一反应就是“哦,这是Windows 11新加的‘预览窗格’”,然后直奔设置里去关——结果发现关了又开&#…

📰

自考04747《Java语言程序设计(一)》考点清单:从基础语法到经典算法题

简介:面向高等教育自学考试考生整理的《Java语言程序设计(一)》(课程代码04747)复习资料PDF,聚焦Java语言基础,可作为自考课程配套辅导与考前冲刺用书。资源为单个PDF文件,大小1.23M…

📰

Hasura GraphQL Engine 元数据乐观并发控制(Optimistic Concurrency Control)设计解析

后端API网关数据库GraphQL 【免费下载链接】graphql-engine Blazing fast, instant realtime GraphQL APIs on all your data with fine grained access control, also trigger webhooks on database events. 项目地址: https://gitcode.com/gh_mirrors/gr/graphql-…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬