npm私有库搭建及配置

cnpm是由淘宝团队开发的企业内部npm私有库,它包含仓库和网站两个部分:

安装基本要求

  • node >= 4.3.1
  • Databases:支持以下类型
    • sqlite3 >= 3.0.2, 默认为sqlite3
    • MySQL >= 0.5.0, 包括mysqldmysql cli.mysql@5.6.16是开发者测试过的版本.
    • MariaDB
    • PostgreSQL

1. 处理流程

通过cnpm我们可以实现同步获取官方包更新,同时内部的包只在内部安装使用,不会被发布到官方地址.

cnpm官方网络配置如下图所示: cnpm流程图

在内部项目中,实际流程大致如下:

1.1. 包安装流程

cnpm中通过如下流程处理install命令:

npm client客户端(npm/yarn/cnpm等)  
--------发起install请求-----------
cnpm webiste根据配置处理请求:  
a. 当为内部包或cnpm同步的包时 ==> 读取本地同步包数据.  
b. 其他情况 ==> 实时查询源数据  
当查找到数据 ==> 返回数据
当查找不到数据 ==> 继续下一步
---查找sourceNpmRegistry配置地址---
当查找到数据后,cnpm webiste进行如下处理:
1. 如果有缓存需求,缓存包到本地,并增加同步更新任务.  
2. 返回包数据  
当没有数据时,返回错误

1.2. 包发布流程

cnpm中通过如下流程处理publish命令:

npm client客户端(npm/yarn/cnpm等)  
--------发起publish请求-----------
检测是否为管理员:
a. 是,继续下一步.  
b. 否,报错

cnpm webiste根据配置处理请求:  
a. 当为配置的scopes或者privatePackages白名单中的包时 ==> 缓存包文件在服务端并存储到数据库中.并返回结果  
b. 其他情况 ==> 发布到sourceNpmRegistry配置的地址,进入下一步  
--------如果是公开包时------------
查看是否有缓存需求配置,如果有,则缓存包到本地,并增加同步更新任务.同时返回结果

2. 安装

2.1. 安装并启动项目

//1. 进入对应安装目录,拉取git仓库源码
git clone https://github.com/cnpm/cnpmjs.org.git  
//2. 修改配置文件(配置文件说明见下)并执行安装任务
make install  
//3. 启动任务
npm start  
//或
./bin/nodejsctl start

nodejsctl自带进程管理,你无需使用pm2(或forever)监控.

可以使用以下命令进行更多操作

//查看状态
npm run status  
//或
./bin/nodejsctl status
//停止服务
npm run stop  
//或
./bin/nodejsctl stop
//重启服务
./bin/nodejsctl restart

2.2. 配置项说明

进入./config/index.js可以修改配置,源项目文件见此,必须配置的项为registryHost,详细配置说明如下:

3. 客户端配置

使用客户端进行如下配置即可开始使用私有库.

npm: npm config set registry "http://私有库地址:registryPort端口"  
yarn: yarn config set registry "http://私有库地址:registryPort端口"  
cnpm: cnpm config set registry "http://私有库地址:registryPort端口"  

附带仓库地址备份,帮助还原配置

淘宝仓库:"https://registry.npm.taobao.org"
官方仓库: "https://registry.npmjs.org"

参考