
# 通过编译构建任务发布/获取NPM私有组件
在软件开发过程中，开发团队经常需要使用私有组件来构建项目，以保护知识产权和提高代码复用率。然而，当团队尝试从NPM私有依赖库获取依赖包时，可能会遇到权限问题或网络延迟，导致编译构建任务失败。如何确保私有组件的安全发布和高效获取，成为开发团队面临的一大挑战。本文档将介绍如何通过编译构建任务发布私有组件到NPM私有依赖库，以及如何从NPM私有依赖库获取依赖包完成编译构建任务，以解决上述问题。
#### 费用说明
该功能需要使用代码托管（CodeArts Repo）服务与编译构建（CodeArts Build）服务，需要[开通/购买华为云码道服务组合套餐](https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0002.html)。
#### 前提条件
- 已有可用项目。如果没有项目，请先[新建CodeArts项目](https://support.huaweicloud.com/usermanual-devcloud/codearts_01_0027.html)，例如项目名称为project_npm。
- 已[创建NPM格式私有依赖库](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0008.html)。
- 已添加当前账号对当前私有库的"上传"、"下载/查看"私有库组件权限，具体操作请参考[配置私有依赖库权限](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0047.html)。
 
 #### 发布私有组件到NPM私有依赖库
1. 下载私有依赖库配置文件。 
   1. 使用华为云账号[访问CodeArts Artifact的私有依赖库](https://support.huaweicloud.com/usermanual-cloudartifact/cloudartifact_01_0007.html#section0)。
   
   2. 在仓库列表中选择目标NPM私有依赖库。
   
   3. 单击页面右侧"操作指导"。
   
   4. 在弹框中单击"下载配置文件"。 ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002526179862.png "点击放大")
      
      
   
   5. 在本地将下载的"npmrc"文件另存为".npmrc"文件。
   
   
   
   
2. 配置代码仓库。 
   1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
   
   2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002480397144.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
   
   3. 单击"立即使用"，进入CodeArts服务首页。
   
   4. 在顶部菜单选择"服务 \> 代码托管"，进入代码托管服务。
   
   5. 创建Node.js代码仓库（操作步骤请参考[新建代码仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0013.html)）。本文使用模板"Nodejs Webpack Demo"创建代码仓库。
   
   6. 进入代码仓库，将".npmrc"文件[上传至代码仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0064.html)的根目录中。
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002480237168.png "点击放大")
      
      
   
   
   
   
3. 配置并执行编译构建任务。 
   1. 在代码仓库中，单击页面右上角"设置构建"，页面跳转至"新建编译构建任务"页面。 在页面中选择"npm模板"，单击"下一步"。
      
   
   2. 编辑步骤"Npm构建"。
      - 工具版本按照实际选择，本文中选择"nodejs12.7.0"。
      
      - 删除已有命令行，输入以下命令：
        ```
        export PATH=$PATH:/root/.npm-global/bin
        npm config set strict-ssl false
        npm publish --verbose
        ```
        
      
      
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002510835402.png "点击放大")
      
   
   3. 单击"新建并执行"，启动构建任务执行。 待任务执行成功时，进入私有依赖库，可找到通过构建任务上传的NPM私有组件。
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002510995146.png "点击放大")
      
   
   
   
   
 
#### 从NPM私有依赖库获取依赖包
以[发布私有组件到NPM私有依赖库]中发布的NPM私有组件为例，介绍如何从Npm私有依赖库中获取依赖包。
1. 配置代码仓库。 
   1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
   
   2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002512517027.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
   
   3. 单击"立即使用"，进入CodeArts服务首页。
   
   4. 在顶部菜单选择"服务 \> 代码托管"，进入代码托管服务。
   
   5. 创建Node.js代码仓库（操作步骤请参考[创建云端仓库](https://support.huaweicloud.com/usermanual-codeartsrepo/codeartsrepo_03_0013.html)）。本文使用模板"nodejs Webpack Demo"创建代码仓库。
   
   6. 参考[发布私有组件到NPM私有依赖库]，获取".npmrc"文件并上传至需要使用Npm依赖包的代码仓库根目录中。
   
   7. 在代码仓库中找到"package.json"文件并打开，将依赖包配置到dependencies字段中，本文中配置的值为：
      ```
      "@test/vue-demo": "^1.0.0"
      ```
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002480237180.png "点击放大")
      
   
   
   
   
2. 配置并执行编译构建任务。 
   1. 在代码仓库中，单击页面右上角"设置构建"，页面跳转至"新建编译构建任务"页面。 在页面中选择"空白构建模板"，单击"下一步"。
      
   
   2. 添加步骤"Npm构建"。 ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002512517035.png "点击放大")
      
   
   3. 编辑步骤"Npm构建"。
      - 工具版本按照实际选择，本文中选择"nodejs12.7.0"。
      
      - 删除已有命令行，输入以下命令：
        ```
        export PATH=$PATH:/root/.npm-global/bin
        npm config set strict-ssl false
        npm install --verbose
        ```
        
      
      
      ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002512397063.png "点击放大")
      
   
   
   
   
3. 单击"新建并执行"，启动构建任务执行。 
   待任务执行成功时，查看构建任务详情，在日志中找到类似如下内容，说明编译构建任务从私有依赖库完成了依赖包下载并构建成功。
   ![](https://support.huaweicloud.com/bestpractice-cloudartifact/zh-cn_image_0000002512397071.png "点击放大")
   
   
 
#### NPM命令简介
在编译构建任务命令行中，还可以配置如下NPM命令，以完成其它功能：
- 删除私有依赖库中已存在的私有组件
  ```
  npm unpublish @scope/packageName@version
  ```
  
- 获取标签列表
  ```
  npm dist-tag list @scope/packageName
  ```
  
- 新增标签
  ```
  npm dist-tag add @scope/packageName@version tagName --registry registryUrl --verbose
  ```
  
- 删除标签
  ```
  npm dist-tag rm @scope/packageName@version tagName --registry registryUrl --verbose
  ```
  
命令行参数说明：
- scope：私有依赖库路径，查看方法请参考[发布私有组件到NPM私有依赖库]。
- packageName："package.json"文件中，name字段中scope之后的部分。
- version："package.json"文件中，version字段对应的值。
- registryUrl：私有库配置文件中的对应scope的私有库地址url。
- tagName：标签名称。
以[发布私有组件到NPM私有依赖库]发布的私有组件为例：
- scope对应的值为"test"。
- packageName对应的值为"vue-demo"。
- version对应的值为"1.0.0"。
因此，删除此组件的命令应为：
```
npm unpublish @test/vue-demo@1.0.0
```
