uniapp的uni_modules目录需要提交到Git吗?为什么有了node_modules,还需要再发明一个uni_modules的轮子?node_modules和uni_modules的区别

需要提交。

官网:

uni_modules | uni-app官网https://uniapp.dcloud.net.cn/plugin/uni_modules.html

什么是 uni_modules

uni_modules是uni-app的插件模块化规范(HBuilderX 3.1.0+支持),通常是对一组js sdk、组件、页面、uniCloud云函数、公共模块等的封装,用于嵌入到uni-app项目中使用,也支持直接封装为项目模板。

为什么有了node_modules,还需要再发明一个uni_modules的轮子?

  1. node_modules 不满足云端一体的需求。uniCloud的云函数、公共模块、schema和前端的各种js_sdk、组件、页面、项目,无法在node_modules模式下有效融合。
  2. uni_modules有付费和商业的插件,DCloud插件市场提供了版权保护。而node_modules不支持付费和版权保护。
  3. node_modules 是开发者友好而影响终端用户性能的模式。开发者为了省事,层层嵌套node_modules,造成数量惊人的文件数目。uni_modules不支持module嵌套,鼓励开发者优化包体积
  4. uni_modules鼓励开发者总是使用最新版。并在HBuilderX中提供了版本内容对比工具
  5. uni_modules里也支持放置node_modules,没有强行排斥。

与之前插件市场的普通插件相比,uni_modules有何优势?

  1. 支持在HBuilderX里直接发布、更新、删除
  2. 支持依赖(在package.json中配置)
  3. 插件文件位置统一,不会造成下载一个插件,不知道给工程下多少个目录写入了多少个文件。删除插件时也可以一点删除

#目录结构

uni_modules插件如果是项目类型的插件,只需要在项目的根目录下放一个符合uni_modules规范的package.json。

如果是非项目类型的插件,比如组件、js sdk、页面模板、云函数,则需要放置在项目的uni_modules目录下。

此时uni_modules目录下的目录结构和uni-app的项目结构是一致的,如下:

	
uni_modules                                项目根目录下
└── [plugin_id] // 插件 ID
    ├── uniCloud                           插件内的uniCloud内容会被虚拟合并到项目根目录的uniCloud中(注意:插件内的uniCloud目录,没有-aliyun,-tcb后缀)
    ├── components                         符合vue组件规范的uni-app组件目录,支持easycom规范
    ├── hybrid                             存放本地网页的目录,详见
    ├── pages                              业务页面文件存放的目录 
    ├── static                             存放应用引用静态资源(如图片、视频等)的目录,注意:静态资源只能存放于此
    ├── wxcomponents                       存放小程序组件的目录,详见
    ├── license.md                         插件使用协议说明
    ├── package.json                       插件配置,必选(除此之外均`可选`)                          
    ├── readme.md                          插件文档
    ├── changelog.md                       插件更新日志
    ├── menu.json                          如果是uniCloud admin插件,可以通过menu.json注册动态菜单,详见 menu.json 配置
	

Tips

  • 插件目录不支持pages.json、App.vue、main.js、manifest.json、uni.scss文件,如果需要插件使用者修改这些文件内容,请在插件文档(readme.md)中详细说明。
  • 在插件内部引用资源、跳转页面时,请尽量使用相对路径。
  • 插件内components目录同样支持easycom规范,插件使用者可以直接在项目中使用插件内符合easycom规范的组件,当项目或插件内存在easycom组件冲突,编译时会给予提示,您可以通过修改组件目录及组件文件名称来解决冲突问题。

#配置

#package.json

package.json在每个uni_modules插件中都必须存在,包含了插件的基本信息。以下是package.json的详细配置说明

{
    // 注意,不能直接拷贝本段代码到编辑器中,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": ["前端组件", "通用组件"], // 必填, 插件市场分类
      "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配置
        "dependencies": [], // 依赖的 uni_modules 插件ID列表
        "encrypt": [ // 配置云函数,公共模块,clientDB Action加密
            "uniCloud/cloudfunctions/uni-admin/controller/permission.js" // 注意这里是真实的文件路径,uni_modules下的uniCloud不带-aliyun、-tcb后缀,但是项目根目录下的uniCloud是带有后缀的
        ],
        "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"
                }
            }
        }
    }
}

Tips

  • 上述配置基于npm package.json (opens new window)规范扩展,故标准的package.json属性也同样支持,比如可以通过files来控制要上传的插件包内容

#uni_modules.config.json

uni_modules.config.json在项目根目录,可以配置插件更新后的触发脚本(通常用于执行自定义的自动化任务),插件uniCloud支持的服务空间。以下是uni_modules.config.json的详细配置说明

{
	"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"] // 当项目同时存在aliyun,tcb时可手动指定该插件所属的服务空间
		}
	}
}

Tips

  • 当项目内仅关联了一个服务空间,此时uni_modules插件内的uniCloud相关资源会自动归属至该服务空间,无需在uni_modules.config.json中配置uniCloud所属服务空间
  • 当项目内关联了两个服务空间(阿里云和腾讯云同时存在)
    • 若未在uni_modules.config.json中配置平台,则上传该插件uniCloud资源时,会提示上传至选择哪个服务空间
    • 若已在uni_modules.config.json中配置平台,则上传时以配置为准,自动归属至指定的服务空间

#npmignore

uni_modules插件发布到插件市场是通常需要忽略掉一些目录或文件,比如unpackage.hbuilderxnode_modules等,这时可以通过npmignore文件来实现文件的忽略。

文件名:.npmignore,注意开头有个点。典型的npmignore文件内容如下:

.hbuilderx
unpackage
node_modules
package-lock.json

注意

  • 项目根目录下的.npmignore对发布项目、插件模板生效。uni_modules/插件Id/.npmignore对发布插件生效

#开发 uni_modules 插件

uni_modules | uni-app官网https://uniapp.dcloud.net.cn/plugin/uni_modules.html#开发-uni-modules-插件

猜你喜欢

转载自blog.csdn.net/qq_22182989/article/details/124817945