可以为用户或组织发布 npm 软件包。
要求
使用 npm 软件包注册表,需要 Node.js,以及 Yarn 或 npm 等包管理器。
注册表支持有作用域和无作用域的软件包。以下示例使用 npm 工具,作用域为 @test,用户名为 testuser。
配置软件包注册表
要在 npm 中注册此软件包注册表,需要配置新的软件包来源,并提供软件包所有者的令牌:
npm config set {scope}:registry https://forgejo.example.com/api/packages/{owner}/npm/
npm config set -- '//forgejo.example.com/api/packages/{owner}/npm/:_authToken' "{owner_token}"
注意:上述 npm config set -- '//forgejo...' 写法中,特意省略了开头的 https: 协议部分,不能将其加上。npm config set -- 'https://forgejo...' 是错误的,因为 npm 配置只使用 URI 片段。下面有具体示例。
| 参数 | 说明 |
|---|---|
scope |
软件包的作用域 |
owner |
软件包所有者 |
token |
所有者的个人访问令牌 |
例如:
npm config set @test:registry https://forgejo.example.com/api/packages/testuser/npm/
npm config set -- '//forgejo.example.com/api/packages/testuser/npm/:_authToken' "{personal_access_token}"
不使用作用域时:
npm config set registry https://forgejo.example.com/api/packages/testuser/npm/
npm config set -- '//forgejo.example.com/api/packages/testuser/npm/:_authToken' "{personal_access_token}"
发布软件包
发布时,如果命令或项目没有指定参数,npm 会使用已有配置和默认值。以下命令依次演示默认发布、发布到指定注册表,以及指定作用域和注册表:
npm publish
npm publish --registry={SERVER_URL}/api/packages/{owner}/npm/
npm publish --scope=@{scope} --registry={SERVER_URL}/api/packages/{owner}/npm/
如果同名、同版本的软件包已经存在,就不能再次发布。必须先删除已有软件包的该版本:可以在界面中的 SERVER_URL/OWNER/-/packages/npm/PACKAGE_NAME/PACKAGE_VERSION/settings 删除,也可以通过命令行取消发布。
取消发布软件包
运行以下命令删除软件包:
npm unpublish {package_name}[@{package_version}]
| 参数 | 说明 |
|---|---|
package_name |
软件包名称 |
package_version |
软件包版本 |
例如:
npm unpublish @test/test_package
npm unpublish @test/test_package@1.0.0
注意:这一行为与公共 npm 仓库不同。一旦删除或取消发布,就可以立即重新发布名称和版本相同的软件包。
安装软件包
执行以下命令,从注册表安装软件包:
npm install {package_name}
其中 package_name 是软件包名称。例如:
npm install @test/test_package
为软件包添加标签
注册表支持版本标签,可以通过 npm dist-tag 管理:
npm dist-tag add {package_name}@{version} {tag}
| 参数 | 说明 |
|---|---|
package_name |
软件包名称 |
version |
软件包版本 |
tag |
标签名称 |
例如:
npm dist-tag add test_package@1.0.2 release
标签名称不能是有效的版本号。所有可以解析为版本号的标签名都会被拒绝。
搜索软件包
注册表支持搜索,但不支持 author:forgejo 这样的特殊搜索限定符。
支持的命令
npm install
npm ci
npm publish
npm unpublish
npm dist-tag
npm view
npm search
故障排查
在执行失败的命令之前,先运行:
npm config set loglevel verbose #The default log level is notice
npm config ls -l #Lists the full config, including defaults. User config is at the bottom.
npm CLI 文档可以帮助找出失败命令所需、但尚未配置的设置。身份验证相关配置错误,在默认日志级别下可能不会明显报错,或者只给出难以理解的错误。
Forgejo Actions 示例
jobs:
publish:
name: Publish to Forgejo NPM registry
runs-on: docker
steps:
- name: set npm config
# See note above about using {server_uri_fragment}, i.e. '//code.forgejo.org'
# DO NOT USE ${{secrets.FORGEJO_TOKEN}}, use the owner's token!
run: |
npm config set @{scope}:registry ${{github.SERVER_URL}}/api/packages/{owner}/npm/
npm config set "{server_uri_fragment}/api/packages/{owner}/npm/:_authToken=${{secrets.OWNER_TOKEN}}"
- name: Checkout repo
uses: actions/checkout@v6
- name: Install Dependencies
run: npm install
- name: Build
run: npm run build
# WARNING: The following commented step will override the default CA settings (null == only use known CAs) and prevent npm from communicating with the public npm registry
# To undo it, add another step: 'run: npm config set cafile='
#- name: Only if using a self-signed cert
# run: npm config set cafile {location of ca-cert.pem}
- name: Publish to registry
run: npm publish --scope=@{scope} --registry=${{github.SERVER_URL}}/api/packages/{owner}/npm/
在 Forgejo Actions 中使用 npm 注册表时,可能需要通过 npm 获取某些信息。例如,由于 Forgejo 软件包的存储结构,已发布的 tarball 不会存放在界面中可手动获取的 SERVER_URL/USER/-/packages/npm/PACKAGE_NAME/PACKAGE_VERSION/files/PACKAGE_ID/ 位置。如果需要直接访问 tarball,可以使用以下命令获取一个 URL,供 curl 或其他可在 Forgejo Actions 中运行的命令行工具使用:
npm view PACKAGE_NAME{@PACKAGE_VERSION} --registry={REGISTRY_URL} dist.tarball
原文:npm Package Registry。作者/维护方:Forgejo 文档维护者。本文为中文翻译,代码及命令保留原文。
本页原文按 Apache-2.0 许可证提供,派生自 Gitea 原始文档。











暂无评论内容