如何构建和发布 npm 包到 GitHub Package Registry?

news/2024/11/27 14:32:01/文章来源:https://www.cnblogs.com/ministep/p/18572252

如何构建和发布 npm 包到 GitHub Package Registry?

本文将指导您在 GitHub Packages 上构建和发布 npm 到 GPR。

  • npm:全称 Node Package Manager,NodeJs 包管理和分发的工具。
  • GPR:全称 GitHub Package Registry,托管和管理软件包的平台,为常用包管理器提供不同的包仓库,如:npm、RubyGems、Apache Maven、Gradle、Docker 和 Nuget。GitHub 的 Container Registry 针对容器进行了优化,支持 Docker 和 OCI 镜像。

前提条件

  • 一个 npm 账号(npmjs.com)
  • 一个 GitHub 仓库
  • 了解 GitHub 和 Git 命令
  • GitHub Actions、CI/CD 和 YAML 的基础知识

操作步骤

Step 1:生成 GitHub token

  1. 登录 GitHub
  2. 点击头像
  3. 点击 Settings
  4. 点击 Developer settings
  5. 展开 Personal access tokens
  6. 点击 Tokens(classic)
  7. 点击 General new Token
  8. 点击 General new token(classic) 创建 token
  9. 设置 GitHub token 的权限:

2023-12-20_150601

  • 勾选 repo 下所有权限
  • 勾选 admin:repo_hook 下所有权限
  • 勾选 delete_repo 下所有权限

Step 2:创建库

使用 GitHub REST API 创建库,请将 <TOKEN> 替换为你的 GitHub token:

 
1
2
3
4
5
6
7
$ curl -L \-X POST \-H "Accept: application/vnd.github+json" \-H "Authorization: Bearer <TOKEN>" \-H "X-GitHub-Api-Version: 2022-11-28" \https://api.github.com/user/repos \-d '{"name":"publish-to-gpr","description":"使用 GitHub Actions 构建和发布 npm 包到 GitHub Package Registry。","homepage":"https://github.com/harrisonwang/publish-to-gpr"}'

Step 3:克隆到本地

上面的命令将创建一个空白的库,我们使用以下命令将它克隆到本地:

 
1
$ git clone git@github.com:HarrisonWang/publish-to-gpr.git

Step 4:创建 index.js 文件

 
1
2
3
4
5
6
7
8
# 切换至 publish-to-gpr 目录
$ cd publish-to-gpr# 创建 README.md 文件
$ echo "# publish-to-gpr" >> README.md# 创建 index.js 文件
$ echo 'console.log("Hello GPR!");' >> index.js

Step 5:初始化 npm 包

初始化 npm,生成 package.json 文件:

 
1
2
3
4
5
6
7
$ npm init
...
package name: (publish-to-gpr) @harrisonwang/publish-to-gpr
...
test command: exit 0
...
Is this OK? (yes) yes

@harrisonwang/publish-to-gpr:npm 包前面加 @harrisonwang ,代表 scopes 相关的包,可以理解为作用域包,作用域使我们创建和其他用户或组织的同名包,也不会发生冲突。

编辑 package.json 文件,添加以下配置设置要发布的 npm 包仓库和包作用域:

 
1
2
3
  "publishConfig": {"@harrisonwang:registry": "https://npm.pkg.github.com"}

Step 6:安装 npm 依赖包

生成 package-lock.json 文件:

 
1
$ npm i

Step 7:创建 GitHub Workflow 文件

新建 .github/workflows 目录:

 
1
$ mkdir -p .github/workflows/

创建 .github/workflows/publish.yml 文件,用于自动构建和发布 npm 包:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
name: Node.js Packageon:release:types: [created]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v4- uses: actions/setup-node@v3with:node-version: 16- run: npm ci- run: npm testpublish-gpr:needs: buildruns-on: ubuntu-latestpermissions:packages: writecontents: readsteps:- uses: actions/checkout@v4- uses: actions/setup-node@v3with:node-version: 16registry-url: https://npm.pkg.github.com/- run: npm ci- run: npm publishenv:NODE_AUTH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Step 8:提交并推送至 GitHub

 
1
2
3
4
5
$ git add .$ git commit -m "workflow to publish package"$ git push

Step 9:创建 Tag 发布到 GPR

仓库首页点击 Create a new release:

image-20231220153510297

创建 Tag:

image-20231220153649146

输入版本号点击 Publish release 发布:

image-20231220153737981

可以看到我们已经成功打包源代码包:

image-20231220153811036

然后我们在 GitHub Actions 中查看 workflow 的运行情况,可以看到已运行成功:

image-20231220154011215

至此,已成功发布到 npm 包到 GitHub Package Registry:

image-20231220154117241

总结

GitHub 允许你在它上面构建、发布和访问 npm 包,使得你的包能够通过 GitHub Packages 进行集中管理和分发。

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

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

相关文章

创业公司该怎么进行季度绩效考核?

创业公司在绩效考核中面临的问题主要包括目标设定不清晰、时间安排不合理、绩效标准不明确、缺乏反馈和沟通、过分关注短期成果、资源不足以及文化差异等。这些问题可能单独或共同存在,导致绩效考核无法达到预期效果,甚至可能对员工的工作积极性和公司的发展造成负面影响。因…

eGFR计算器,专业可靠的肾功能评估工具

在当今数字化医疗时代,准确评估肾功能对于疾病预防和治疗至关重要。eGFR计算器作为一款专业的在线工具,为医疗工作者和患者提供了便捷可靠的肾小球滤过率(eGFR)计算服务。在当今数字化医疗时代,准确评估肾功能对于疾病预防和治疗至关重要。eGFR计算器作为一款专业的在线工具…

数据库小版本升级

PostgresQL14.9升级到14.13 step 1.查看当前数据库版本和测试数据[postgres@localhost ~]$ postgres -V postgres (PostgreSQL) 14.11 [postgres@localhost ~]$ psql psql (14.11) Type "help" for help. postgres=# postgres=# select version(); version ---------…

HarmonyOS开发笔记2

应用基本信息 我们先来看下harmony的工程结构中的文件主要涉及以下几个目录AppScope > app.json5:应用的全局配置信息,详见app.json5配置文件。 entry:HarmonyOS工程模块,编译构建生成一个HAP包。src > main > ets:用于存放ArkTS源码。 src > main > ets &…

CAN收发器 – TJA1050(高速CAN)

芯片内部电路引脚定义:VCC:5V TX、RX:与设备的CAN控制器相连 Vref:参考电平输出 S:选择输入是高速模式或者静默模式ps:Vref和S可不接

常见的几款电脑桌面好用的便签备忘录推荐

1、系统自带便笺 Windows系统自带有便笺(sticky notes),打开即可使用,可记录简单的文字、图片,也可以列清单。 但是不支持设置提醒时间,无法一直悬挂在桌面上显示,实时同步到手机端操作很麻烦。 仅在电脑上简单记事,用它足够了!2、敬业签 界面可以一直悬挂在桌面上置顶…

【java开发】使用Launch4j将Web应用的Jar包打包成exe

如果当你在工作中使用Java比较多,有时会碰到将Jar包打包成exe部署在客户电脑上的需求。经过一顿操作猛如虎的网上搜索,最后技术选型选择了Launch4j,就图它开源免费、上手简单。 Launch4j 是一个跨平台工具,用于将以 JAR 文件分发的 Java 应用程序封装为轻量级的 Windows 原…

modbus通讯协议

一.modbus的四种传输协议: Modbus RTU:使用二进制格式进行数据传输,通讯效率更高. Modbus ASCII使用ASCII码进行数据传输,可读性好,但通讯效率更低. Modbus TCP/IP是基于以太网的一种通讯方式,它将Modbus协议封装在TCP/IP协议栈中,通过以太网传输数据。具有高速、稳定的特…

简单搭建一个小型拓扑,练习路由器的Esay IP的设置

内网用户需要访问外网时,可以通过配置NAT,实现IP数据报标头IP的替换。 本条博客是NAT转换的具体实现方式,由华为官方文档摘录Esay IP的实现。1. cloud云的配置 增加两个Ethernet端口,添加到端口映射表2.路由器的配置# 进入系统视图 <Huawei>system-view # 查看简洁的…

使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式

使用 Pyinstaller 打包为 windows exe程序 添加管理员权限的多种方式 本文提供几种在使用 Pyinstaller打包后,为包体 exe提升管理员权限的方式。 注意事项: 管理员权限的必要性:确保程序确实需要管理员权限,否则用户可能会质疑程序的安全性。 数字签名:最好对生成的 .exe …

DSPf28335-时钟及控制系统

外部晶振30Mhz,经过十倍频与二分频得到150Mhz系统时钟系统时钟在供给外设,为不同的外设提供不同的时钟频率,进行不同程度的分频分别供给SPI-A,SCI-A;I2C-A;eCAN-A/B;ePWM;eCAP等外设进行系统控制;

【嵌入式开发】log.c:一个非常轻量的嵌入式日志库

log.c简介github链接: https://github.com/rxi/log.clog.c是一个轻量级的日志库。一个用 C99 实现的简单日志库,这意味着它应该可以在任何支持 C99 标准的平台上编译和运行,如我们的嵌入式系统中。 特点: 使用C99标准,适用于嵌入式。 支持静默模式。 支持日志级别设置。 支…