规范开发三方共享包

  • 〇、前言
  • 一、了解评分规则
  • 二、规范开发共享包
    • 1、规范开源协议名称写法
    • 2、将 oh-package.json5 文件补充完整
    • 3、补充 example 目录
    • 4、基本的 README 和 CHANGELOG
  • 三、ohpm 包的源码隔离特性

〇、前言

对于开发者来说,对外发布代码制品,主要有两种形式:构建成完整的应用上架到相关软件商店中,构建成三方软件包发布到中心仓库,鸿蒙生态这边也是如此,只不过,对于个人开发者来说,上架到华为的鸿蒙应用商店并不容易,因为必须提供软著证书等有效证件,而这个软著的申请本来就很费事,相比之下,发布共享包到 ohpm 中心仓库,就显得简单可行了。

在这里插入图片描述
如图所示,我已经成功上架两个软件包到 ohpm 中心仓库上了,因而积累了一定的经验,下面就让我向大家阐述如何规范地开发鸿蒙共享包。

一、了解评分规则

在这里插入图片描述
如上所述,ohpm 中心仓有一套针对每个发布到仓库中的软件包的评分规则,满分 50 分,共 5 种中得分规则。而我已经上架的软件包,并未针对得分规则进行适配开发,因而只获得了 15 分,也因此我重新发布了 lib_easyrouter v1.1.0(正在上架审核)。

评分高的软件包,想必理所当然地会获得更高的排名,他人在搜索的时候,更容易出现在第一分页中。

总的来说,遵循 ohpm 软件包评分规则,既是我们提高自己软件包的排名的方法,也是我们进行规范开发的依据。

二、规范开发共享包

1、规范开源协议名称写法

既然,ohpm 中心仓有针对开源协议的评分点,那么,我们在选择的时候,就要有的放矢;此前,我习惯性地使用 Mulan PSL v2 作为协议名称,但是这种写法并不符合SPDX规范,导致即便自己选择的开源协议就在 SPDX License List中,也无法被 ohpm 中心仓的协议扫描工具所识别:

在这里插入图片描述

因此,我们需要将 oh-package.json5文件中的 license 字段值,正确填写为 MuLanPSL-2.0,类似的,其他开源协议的名称填写,也应当按照 SPDX License List 中列举的样子去填写;如果你使用的开源协议,在 SPDX License List 中找不到,那么,说明它就不是 SPDX 规范的协议,此时,最好换一个。

2、将 oh-package.json5 文件补充完整

在 lib_easyrouter 的得分明细中,可以看到因为 oh-pakage.json 文件缺少内容而被扣分,主要就是少了 keywords 和 homepage,所以,针对性补充内容之后,就得到了一份内容完整的 oh-package.json5 文件:

{"name": "lib_easyrouter","version": "1.1.0","description": "一个以动态加载为核心实现跨模块页面路由功能的路由工具包","main": "Index.ets","keywords": ["跨模块路由", "动态加载"],"homepage": "https://gitee.com/pengyoucongcode/EasyRouter","author": "***","license": "MulanPSL-2.0","repository": "https://gitee.com/pengyoucongcode/EasyRouter","dependencies": {"lib_log": "^1.0.0"}
}

3、补充 example 目录

lib_easyrouter 另一个失分的地方,就是因为缺少 example 目录,实际上,完善的软件包也应当有一个提供功能演示的 example,所以,我在 v1.1.0 版本的 lib_easyrouter 中,针对性地加上了 example:
在这里插入图片描述

4、基本的 README 和 CHANGELOG

如果你对自己发布的 ohpm 包,在中心仓上最终能获得多少分并不在乎,但为了让软件包能够成功上架,必须提供基本的说明文档,也就是 README.md 和 CHANGELOG.md。

三、ohpm 包的源码隔离特性

与 Maven、PyPi 和 NPM 等三方包管理系统所不同的是,ohpm 并不会直接将源码暴露给其他引用者:
在这里插入图片描述
以我自己发布的另一个鸿蒙共享包 lib_log 为例,可以看到下载的所谓源码,都是 .d.ets 文件,而这种文件就跟 .d.ts 文件一样,只是一种声明文件,并不会包含具体的实现逻辑,类似于 C/C++ 的头文件,所以,如果你没有在 oh-package.json5 使用 repository 参数说明代码仓库所在,那么别人是无法知道你的实现代码的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90719.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90719.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/90719.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[电网备考]计算机组成与原理

计算机系统概述 计算机发展历程 从数据表示: 计算机可以分为数字计算机与模拟计算机 1946 第一台电子数字计算机 ENIAC 在宾夕法尼亚大学诞生,标志进入电子计算机时代时间计算机发展阶段1946-1958电子管计算机时代1958-1964晶体管计算机时代1964-1971集成电路计算机时代1971-至…

8.c语言指针

内存管理C语言中,栈内存(局部变量)自动分配/释放,静态区(全局、静态变量)编译时分配;堆内存需手动分配/释放,核心函数有3个:malloc函数原型:void* malloc(siz…

使用GPU训练模型

本文代码详解参考: 模型训练基础流程-CSDN博客 目录 为什么要用GPU训练模型 什么是CUDA 利用GPU训练—方式一(.cuda()) 利用GPU训练—方式二 (.to()) Google Colaboratory 为什么要用GPU训练模型 用 GPU 训练模型的核心原因是GPU 的硬件架构和计算特性&#…

Matlab学习笔记:自定义函数

MATLAB 学习笔记:自定义函数自定义函数是MATLAB编程的基础,它允许你将重复代码封装成可重用的模块,提高代码的可读性和效率。本笔记将覆盖所有重点知识点,包括语法细节、输入输出处理、函数文件管理、错误处理等。我会用自然易懂的…

【数学建模 | Matlab】二维绘图 和 三维绘图

- 第 115 篇 - Date: 2025 - 07 - 23 Author: 郑龙浩(仟墨) 续写上一篇,如下文章: 【数学建模|Matlab】Matlab「基础知识」和「基础操作」 五 二维绘图 1 举例 % 二维平面绘图(扩展至 -2π 到 2π) x …

MCP (Model Context Protocol) 与 HTTP API:大模型时代的通信新范式

MCP (Model Context Protocol) 与 HTTP API:大模型时代的通信新范式在数字世界的两端,API 扮演着不可或缺的桥梁角色。我们熟知的 HTTP API 是 Web 互联互通的基石,驱动着无数应用程序的交互。然而,随着大型语言模型(L…

CentOS 搭建 Docker 私有镜像仓库

CentOS 搭建 Docker 私有镜像仓库 搭建 Docker 私有镜像仓库能为团队提供高效、安全的镜像管理方案。下面将详细介绍每个步骤的操作细节,其中命令部分均用代码块展示。 一、环境准备 要搭建 Docker 私有镜像仓库,首先得确保服务器环境符合要求&#xff0…

Zookeeper的简单了解

Zookeeper的简单了解 Zookeeper是一个为分布式应用程序提供协调服务的中间件。 主要作用有三点:分布式锁、注册中心、配置管理、。 特点有读写速度快(内存存储)、有监听机制(用于发布订阅)、保证了顺序一致性&#xff…

Android Fragment 全解析

在 Android 开发中,Fragment 是构建灵活界面的核心组件 —— 它既能像 “迷你 Activity” 一样包含布局和逻辑,又能灵活地嵌入到不同 Activity 中复用。无论是平板的多面板布局,还是手机的单页切换,Fragment 都能让界面适配更高效…

0-1BFS(双端队列,洛谷P4667 [BalticOI 2011] Switch the Lamp On 电路维修 (Day1)题解)

对于权重为0或1的路径搜索中&#xff0c;使用双端队列可以对最短路问题进行时间复杂度的优化&#xff0c;由于优先队列的O(longn)级别的插入时间&#xff0c;对于双端队列O(1)插入可以将时间复杂度减少至O(M); https://www.luogu.com.cn/problem/P4667 #include<bits/stdc…

基于LNMP架构的分布式个人博客搭建

1.运行环境主机主机名系统服务192.168.75.154Server-WebLinuxWeb192.168.75.155Server-NFS-DNSLinuxNFS/DNS2.基础配置配置主机名&#xff0c;静态IP地址开启防火墙并配置部分开启SElinux并配置服务器之间使用同ntp.aliyun.com进行时间同步服务器之间使用用ntp.aliyun.com进行时…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的人格品牌化实现路径研究

摘要&#xff1a;在数字化消费时代&#xff0c;人格品牌化已成为企业突破同质化竞争的核心策略。本文以开源AI智能名片、链动21模式与S2B2C商城小程序的融合为切入点&#xff0c;构建“技术赋能-关系重构-价值共生”的人格品牌化理论框架。通过分析用户触达、信任裂变与价值沉淀…

设计模式十一:享元模式(Flyweight Pattern)

享元模式是一种结构型设计模式&#xff0c;它通过共享对象来最小化内存使用或计算开销。这种模式适用于大量相似对象的情况&#xff0c;通过共享这些对象的公共部分来减少资源消耗。基本概念享元模式的核心思想是将对象的内在状态&#xff08;不变的部分&#xff09;和外在状态…

Webpack/Vite 终极指南:前端开发的“涡轮增压引擎“

开篇:当你的项目变成"俄罗斯套娃" "我的index.js怎么引入了87个文件?!" —— 这是每个前端开发者第一次面对复杂项目依赖时的真实反应。别担心,今天我要带你认识两位"打包侠":老牌劲旅Webpack和新锐黑马Vite 一、构建工具:前端世界的&qu…

Windows 下配置 GPU 用于深度学习(PyTorch)的完整流程

1. 安装 NVIDIA 显卡驱动 前往 NVIDIA官网 下载并安装适合你显卡型号&#xff08;如 5070Ti&#xff09;的最新版驱动。下载 NVIDIA 官方驱动 | NVIDIA安装完成后建议重启电脑。 2. 安装 CUDA Toolkit 前往 CUDA Toolkit 下载页。 选择 Windows、x86_64、你的系统版本&#…

详解力扣高频SQL50题之180. 连续出现的数字【困难】

传送门&#xff1a;180. 连续出现的数字 题目 表&#xff1a;Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中&#xff0c;id 是该表的主键。 id 是一个自增列。 找出所有至少连续…

VSCode 报错 Error: listen EACCES: permission denied 0.0.0.0:2288

使用 npm run dev 启动项目时报错&#xff1a;error when starting dev server: Error: listen EACCES: permission denied 0.0.0.0:2288at Server.setupListenHandle [as _listen2] (node:net:1881:21)at listenInCluster (node:net:1946:12)at Server.listen (node:net:2044:…

[2025CVPR-图象超分辨方向]DORNet:面向退化的正则化网络,用于盲深度超分辨率

1. ​问题背景与挑战​ 盲深度超分辨率&#xff08;Blind Depth Super-Resolution, DSR&#xff09;的目标是从低分辨率&#xff08;LR&#xff09;深度图中恢复高分辨率&#xff08;HR&#xff09;深度图&#xff0c;但现有方法在真实场景下面临显著挑战&#xff1a; ​已知…

关系与逻辑运算 —— 寄存器操作的 “入门钥匙”

前言 哈喽大家好&#xff0c;这里是 Hello_Embed 的新一篇学习笔记。在前文中&#xff0c;我们学习了如何用结构体指针操作硬件寄存器&#xff0c;而寄存器的配置往往离不开位运算和条件判断 —— 比如通过逻辑运算精准修改某几位的值&#xff0c;通过关系运算判断硬件状态。这…

使用 Python 将 CSV 文件转换为带格式的 Excel 文件

在日常的数据处理和报表生成工作中&#xff0c;CSV 格式因其简洁性而被广泛采用。但在展示数据时&#xff0c;CSV 文件往往缺乏格式和结构化样式&#xff0c;不利于阅读与分析。相比之下&#xff0c;Excel 格式&#xff08;如 .xlsx&#xff09;不仅支持丰富的样式设置&#xf…