Forgejo npm 软件包注册表

可以为用户或组织发布 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 原始文档。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容