npm 制品库

该文本围绕npm制品库展开,涵盖创建制品库、令牌,介绍本地开发、云原生构建、云原生开发中的凭证配置、拉取与推送制品的方法,不同包管理器(npm、Yarn、pnpm)有不同配置方式,还提及更多用法可查阅npm官方文档 。

创建制品库

参考 创建制品库

获取制品库地址

参考 获取制品库的地址

创建令牌

云原生构建平台的所有资源(包括代码仓库、制品库、OPENAPI等),都需要通过访问令牌进行操作。 创建令牌

本地开发

配置凭证

:::: tabs

@tab npm 有以下三种方式 ::: tabs @tab .npmrc 中配置凭据 粘贴以下内容到项目的 package.json 同一级目录下的 .npmrc

替换 <YOUR_TOKEN> 为您的令牌,<REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# registry=https://npm.cnb.cool/cnb/npm_repo/-/packages/
# always-auth=true
# //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=29bGg84xqRf3ZweNpYlL92e7tDv

registry=<REPO_URL>
always-auth=true
//<REPO_URL_SUFFIX>:_authToken=<YOUR_TOKEN>

@tab 命令行交互

  1. 设置制品仓库,替换 <REPO_URL> 为制品库地址
# 示例 
# npm config set registry https://npm.cnb.cool/cnb/npm_repo/-/packages/

npm config set registry <REPO_URL>
  1. 使用交互式登录命令,您的 username 为 cnb , password 为访问令牌
npm login

@tab 命令行设置 替换 <YOUR_TOKEN> 为您的令牌,<REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# npm config set registry https://npm.cnb.cool/cnb/npm_repo/-/packages/
# npm config set //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=29bGg84xqRf3ZweNpYlL92e7tDv

npm config set registry <REPO_URL>
npm config set //<REPO_URL_SUFFIX>:_authToken=<YOUR_TOKEN>

::: @tab Yarn 如果你的yarn版本是1.x, 可以使用如下方式配置凭证 ::: tabs @tab .npmrc 中配置凭据

粘贴以下内容到项目的 package.json 同一级目录下的 .npmrc

替换 <YOUR_TOKEN> 为您的令牌,<REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# registry=https://npm.cnb.cool/cnb/npm_repo/-/packages/
# always-auth=true
# //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=29bGg84xqRf3ZweNpYlL92e7tDv

registry=<REPO_URL>
always-auth=true
//<REPO_URL_SUFFIX>:_authToken=<YOUR_TOKEN>

@tab 命令行交互 此命令仅适用于本地推送制品,替换 <REPO_URL> 为制品库地址

# 示例
# yarn config set registry https://npm.cnb.cool/cnb/npm_repo/-/packages/

yarn config set registry  <REPO_URL>
yarn publish
# .....
question npm password: 这里输入您的令牌

:::

如果您使用的yarn版本 > 1.x,有两种方案,但是最后都是修改与package.json同级的 .yarnrc.yml ::: tabs @tab 修改.yarnrc.yml 在 .yarnrc.yml 中配置凭据,替换 <REPO_URL> 为制品库地址, <YOUR_TOKEN> 为您的令牌

npmPublishRegistry: "<REPO_URL>" # 推送包的地址
npmRegistryServer: "<REPO_URL>" # 拉取包的地址

npmRegistries:  # 配置每个制品库的凭证
  "<REPO_URL>":
    npmAlwaysAuth: true
    npmAuthToken: <YOUR_TOKEN>

@tab 命令行配置 替换 <REPO_URL> 为制品库地址, <YOUR_TOKEN> 为您的令牌

yarn config set npmPublishRegistry <REPO_URL> # 推送包的地址
yarn config set npmRegistryServer <REPO_URL> # 拉取包的地址
yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' <YOUR_TOKEN>

这样操作后会产生这样的 .yarnrc.yml

npmPublishRegistry: "<REPO_URL>"
npmRegistryServer: "<REPO_URL>" 
npmRegistries: 
  "<REPO_URL>":
    npmAuthToken: <YOUR_TOKEN>

::: @tab pnpm 参考npm, 仅需将命令中的 npm 替换为 pnpm ::::

拉取制品

替换 <PACKAGE_NAME><VERSION><REPO_URL>

# 示例 
# npm install express@5.1.0 --registry=https://npm.cnb.cool/cnb/npm_repo/-/packages/

# npm
npm install <PACKAGE_NAME>@<VERSION> --registry=<REPO_URL>

# yarn
yarn add <PACKAGE_NAME>@<VERSION>

# pnpm
pnpm install <PACKAGE_NAME>@<VERSION> --registry=<REPO_URL>

推送制品

  1. 初始化 package.json,注意替换 <PACKAGE_NAME><VERSION>
{
  "name": "<PACKAGE_NAME>",
  "version": "<VERSION>",
  "description": "",
  "main": "index.js",
  "author": "",
  "license": "MIT"
}
  1. 执行如下命令发布包,替换 <REPO_URL> 为制品库地址
# <REPO_URL>示例 
# https://npm.cnb.cool/cnb/npm_repo/-/packages/

# npm
npm publish --registry=<REPO_URL>

# yarn 版本 > 1.x
yarn npm publish

# yarn 版本 为 1.x
yarn publish --registry=<REPO_URL>

# pnpm
pnpm publish --registry=<REPO_URL>

云原生构建

配置凭证

云原生构建使用令牌有三种方式,参考云原生构建,云原生开发中使用令牌,以下是具体客户端的使用方式

:::: tabs @tab npm ::: tabs @tab .npmrc 中配置凭据 粘贴以下内容到项目的 package.json 同一级目录下的 .npmrc

替换 <REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# registry=https://npm.cnb.cool/cnb/npm_repo/-/packages/
# always-auth=true
# //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=${CNB_TOKEN}

registry=<REPO_URL>
always-auth=true

# 第一种方式 使用 CNB_TOKEN
//<REPO_URL_SUFFIX>:_authToken=${CNB_TOKEN}

# 第二种方式 直接使用,替换 <YOUR_TOKEN> 为您的令牌即可
# //<REPO_URL_SUFFIX>:_authToken=<YOUR_TOKEN>

# 第三种方式,密钥仓库,替换 <ENV_NAME> 为您密钥仓库的变量
# //<REPO_URL_SUFFIX>:_authToken=${<ENV_NAME>}

@tab npm config设置 替换 <REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# npm config set registry https://npm.cnb.cool/cnb/npm_repo/-/packages/
# npm config set //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=${CNB_TOKEN}

npm config set registry <REPO_URL>

# 第一种方式 使用 CNB_TOKEN
npm config set //<REPO_URL_SUFFIX>:_authToken=${CNB_TOKEN}

# 第二种方式 直接使用,替换 <YOUR_TOKEN> 为您的令牌即可
# npm config set //<REPO_URL>:_authToken=<YOUR_TOKEN>

# 第三种方式,密钥仓库,替换 <ENV_NAME> 为您密钥仓库的变量
# npm config set //<REPO_URL>:_authToken=${<ENV_NAME>}

::: @tab Yarn 如果你的yarn版本是1.x, 可以使用如下方式配置凭证

粘贴以下内容到项目的 package.json 同一级目录下的 .npmrc,替换 <REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

# 示例
# registry=https://npm.cnb.cool/cnb/npm_repo/-/packages/
# always-auth=true
# //npm.cnb.cool/cnb/npm_repo/-/packages/:_authToken=${CNB_TOKEN}

registry=<REPO_URL>
always-auth=true

# 第一种方式 使用 CNB_TOKEN
//<REPO_URL_SUFFIX>:_authToken=${CNB_TOKEN}

# 第二种方式 直接使用,替换 <YOUR_TOKEN> 为您的令牌即可
# //<REPO_URL_SUFFIX>:_authToken=<YOUR_TOKEN>

# 第三种方式,密钥仓库,替换 <ENV_NAME> 为您密钥仓库的变量
# //<REPO_URL_SUFFIX>:_authToken=${<ENV_NAME>}

如果您使用的yarn版本 > 1.x,有两种方案,但是最后都是修改与package.json同级的 .yarnrc.yml ::: tabs @tab 修改.yarnrc.yml

npmPublishRegistry: "<REPO_URL>" # 推送包的地址
npmRegistryServer: "<REPO_URL>" # 拉取包的地址

npmRegistries:  # 配置每个制品库的凭证
  "<REPO_URL>":
    npmAlwaysAuth: true
    # 第一种方式 使用 CNB_TOKEN
    npmAuthToken: ${CNB_TOKEN}
    # 第二种方式 直接使用,替换 <YOUR_TOKEN> 为您的令牌即可
    # npmAuthToken: <YOUR_TOKEN>
    # 第三种方式,密钥仓库,替换 <ENV_NAME> 为您密钥仓库的变量
    # npmAuthToken: ${<ENV_NAME>}

@tab 命令行设置

yarn config set npmPublishRegistry <REPO_URL> # 推送包的地址
yarn config set npmRegistryServer <REPO_URL> # 拉取包的地址

# 第一种方式 使用 CNB_TOKEN
yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' ${CNB_TOKEN}

# 第二种方式 直接使用,替换 <YOUR_TOKEN> 为您的令牌即可
# yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' <YOUR_TOKEN>

# 第三种方式,密钥仓库,替换 <ENV_NAME> 为您密钥仓库的变量
# yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' ${<ENV_NAME>}

@tab pnpm 参考npm, 仅需将命令中的 npm 替换为 pnpm ::::

拉取制品

::: tabs @tab npm 使用.npmrc配置方式可参考如下配置,替换 <REPO_URL> 为制品库地址

main:
  push:
    - docker:
        image: node:22
      stages:
        - name: npm install
          script:
            - npm install --registry=<REPO_URL>

使用npm config设置方式可参考如下配置,替换 <REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

main:
  push:
    - docker:
        image: node:22
      stages:
        - name: npm install
          script:
            - npm config set registry <REPO_URL>
            - npm config set //<REPO_URL_SUFFIX>:_authToken=${CNB_TOKEN}
            - npm install --registry=<REPO_URL>

@tab Yarn

main:
  push:
    - docker:
        image: node:22
      stages:
        - name: yarn install
          script:
            - npm install -g corepack
            - corepack enable
            - corepack prepare yarn@1.22.22 --activate

            # 如果yarn版本 > 1.x,同时使用命令行配置,需带下面两行
            # - yarn config set npmRegistryServer <REPO_URL>
            # - yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' ${CNB_TOKEN}

            - yarn install

@tab pnpm 参考npm, 仅需将命令中的 npm 替换为 pnpm :::

推送制品

::: tabs @tab npm 推荐使用 tencentcom/npm 镜像,将如下内容粘贴到 .cnb.yml

$:
  # tag push 时触发
  tag_push:
    - docker:
        image: node:22
      stages:
      - name: update version
        # $CNB_BRANCH 为流水线自带环境变量,为当前提交的tag
        # 修改 package.json 中的version为当前tag,但不会提交代码
        script: npm version $CNB_BRANCH --no-git-tag-version
      - name: npm publish
        image: tencentcom/npm
        settings:
          # CNB_TOKEN_USER_NAME, CNB_TOKEN,CNB_COMMITTER_EMAIL 为流水线自带环境变量
          username: $CNB_TOKEN_USER_NAME
          token: $CNB_TOKEN
          email: $CNB_COMMITTER_EMAIL
          registry: <REPO_URL>
          folder: ./
          fail_on_version_conflict: true

@tab Yarn 如果您使用的Yarn版本为1.x

$:
  # tag push 时触发
  tag_push:
    - docker:
        image: node:22
      stages:
      - name: install yarn
        script: 
          - npm install -g corepack
          - corepack prepare yarn@1.22.22 --activate
      - name: update version
        # $CNB_BRANCH 为流水线自带环境变量,为当前提交的tag
        script: yarn version --new-version=$CNB_BRANCH 
      - name: yarn publish
        script: yarn publish

如果您使用Yarn版本 > 1.x

$:
  # tag push 时触发
  tag_push:
    - docker:
        image: node:22
      stages:
      - name: install yarn
        script: 
          # 需要额外拉取打tag的分支信息
          - git pull origin main 
          - npm install -g corepack
          - corepack prepare yarn@4.9.2 --activate
      - name: update version
        # $CNB_BRANCH 为流水线自带环境变量,为当前提交的tag
        script: yarn version $CNB_BRANCH 
      # 使用命令行配置凭证,需带上下面的stage
      # - name: yarn auth
      #   script:
      #     - yarn config set npmPublishRegistry <REPO_URL>
      #     - yarn config set 'npmRegistries[<REPO_URL>].npmAuthToken' ${CNB_TOKEN}
      - name: yarn publish
        script: yarn npm publish

@tab pnpm 如果您使用命令行配置密钥,则将如下内容粘贴到 .cnb.yml,替换 <REPO_URL> 为制品库地址,<REPO_URL_SUFFIX> 为制品库地址去掉协议前缀

$:
  # tag push 时触发
  tag_push:
    - docker:
        image: node:22
      stages:
      - name: install pnpm
        script: 
          - npm install --global corepack@latest
          - corepack enable pnpm
      - name: update version
        # $CNB_BRANCH 为流水线自带环境变量,为当前提交的tag
        # 修改 package.json 中的version为当前tag,但不会提交代码
        script: pnpm version $CNB_BRANCH --no-git-tag-version
      - name: login registry
        script: 
          - pnpm config set registry <REPO_URL>
          - pnpm config set //<REPO_URL_SUFFIX>:_authToken=${CNB_TOKEN}
      - name: pnpm publish
        script: pnpm publish --no-git-checks

如果您使用 .npmrc 配置密钥,则将如下内容粘贴到 .cnb.yml

$:
  # tag push 时触发
  tag_push:
    - docker:
        image: node:22
      stages:
      - name: install pnpm
        script: 
          - npm install --global corepack@latest
          - corepack enable pnpm
      - name: update version
        # $CNB_BRANCH 为流水线自带环境变量,为当前提交的tag
        # 修改 package.json 中的version为当前tag,但不会提交代码
        script: pnpm version $CNB_BRANCH --no-git-tag-version 
      - name: pnpm publish
        script: pnpm publish --no-git-checks

:::

云原生开发

配置凭证

云原生构建 配置凭证 相同

配置开发镜像

$:
  vscode:
    - docker:
        image: node:22

可以执行如下命令选择包管理器,替换 <NAME><VERSION> 为您的包管理器名称和版本

npm install -g corepack
corepack enable
# 示例 corepack prepare yarn@1.22.22 --activate
corepack prepare <NAME>@<VERSION> --activate

拉取制品

本地开发 拉取制品 相同

推送制品

本地开发 推送制品 相同

更多用法

更多 npm 用法,请查阅 npm 官方文档

点评

点赞或评论
加载评论中...