nodejs搭建CNPM本地库管理

前言 随着Nodejs开发的项目越来越多,Node项目管理就成了一个需要思考的问题了。如果所有项目都开源统一用 NPM 进行管理也没什么问题,但总有一些是我们不希望的完全开放的代码,作为企业是核心秘密保留在公司内部,这个时候就需要在公司内网也搭建一套 NPM 依赖管理系统。CNPM正好就提供了这个功能。从Github上CNPM的主页看,CNPM由国内Alibaba团队开发维护。
1. CNPM是什么? CNPM 是一个Nodejs的库,致力于打造私有的 NPM 注册服务。当然,除了私有库功能以外,CNPM官网 (http://cnpmjs.org/)还提供了NPM同步的服务。CNPM官方发布的架构图:
nodejs搭建CNPM本地库管理
文章图片


从CNPM的架构图中,我们可以看出CNPM是对NPM做的镜像服务,CNPM会定期同步NPM的资源库,同时CNPM支持发布私有的库,这样就非常方便地集成了公有库和私有库,对于公司内部的开发者来说,基本感觉不到两种库的区别。
另外,我们使用NPM下载依赖包时,经常性地会遇到一些包下载失败的情况,主要原因了NPM的注册服务器在国外,国内的网络环境访问国外的IP并不是太好。所以,直接配置到国内的NPM镜像,可以减少NPM下载出错机会。
比如,最近发生的NPM下载时的“No compatibleversion found”错误,如果不想升级NPM的环境,那么你还选择用CNPM去进行依赖管理
2. 搭建CNPM的服务器 从官方文档中,我们看到CNPM服务器环境,只需要Node(0.11.12)+ MySQL(>= 0.5.0),另外我们还需要Linux的环境,接下来就让我们动手自己搭建一个私有NPM的服务器。
我的系统环境:

  • Linux: centOS 6.6
  • Node: v4.2.2
  • MySQL: 5.6.11 MySQL Community Server (GPL)
  • IP: 192.168.8.200
2.1 下载CNPM项目源代码并安装依赖包 通过github下载CNPM项目源代码
git clone git://github.com/cnpm/cnpmjs.org
进入项目目录
cd cnpmjs.org

nodejs搭建CNPM本地库管理
文章图片

安装依赖包之前,先要升级NPM的版本
命令如下:
npm install -g npm
执行命令安装依赖包
npm install
缺少依赖包的报错如下图:
nodejs搭建CNPM本地库管理
文章图片

2.2 创建数据库并导入项目数据表 命令如下:
mysql -uyixiang -p cnpmjs < docs/db.sql

执行命令之前,你应该确保你的mysql数据库已安装,且已创建名为 cnpmjs的数据库

nodejs搭建CNPM本地库管理
文章图片


2.3 修改cnpm项目的配置文件 进入cnpmjs.org目录中的config目录并创建文件 config.js 如下图:
nodejs搭建CNPM本地库管理
文章图片


编辑 config.js 添加配置
module.exports = {
debug: false,

bindingHost: '192.168.8.200', // 设定只能用该IP访问cnpm服务器
scopes: ['@yixiang'],//指定你的私有包的前缀,你发布的包必须以此开头

enableCluster: true, // enable cluster mode
sourceNpmRegistry: 'https://registry.npm.taobao.org',
database: {
db:'cnpmjs',// 数据库名
host: '192.168.8.200',// 你的数据库地址
port:3306,// 默认
username:'yixiang',// 默认
password:'123456',// 默认为空
dialect:'mysql'// 使用mysql,默认为sqlite,
},
enablePrivate:true, // 开启私有库
admins: {
admin: 'ezen@qq.com',
},
syncModel: 'none'//默认有none ,exist,all,此处设置为none,即不同步npm源已有的库至本地,如果设置为exist,则会同步线上npm源存在的模块,比如,当你执行安装某线上模块时,则会把线上该模块版本全部同步至本地库
}
该配置会覆盖index.js的配置
2.4 添加端口及启动cnpm服务端 Vim /etc/sysconfig/iptables
如下图:
nodejs搭建CNPM本地库管理
文章图片


启动cnpm服务器
命令如下:
node --harmony dispatch.js
执行后如下图
nodejs搭建CNPM本地库管理
文章图片


2.5 添加cnpm管理员用户 添加cnpm管理员用户用于发布私有包,因为cnpm必须是admin用户才能进行publish
命令如下:
在cnpm服务器192.168.8.200中添加名为admin密码为admin邮箱为ezen@qq.com
npm adduser --registry=http://192.168.8.200:7001
Username: admin
Password: admin
Email: (this IS public) 必须为上面配置的邮箱,即ezen@qq.com

如下图:
nodejs搭建CNPM本地库管理
文章图片



3. cnpm客户端使用
3.1 包的发布 本地包的配置package.json
{
"name": "@yixiang/one",
"version": "1.0.0",
"main": "./testone.js",
"description": "A Common Module",
"author": "ezen"
}
testone.js 文件内容
/*
* 公共模块
*/
function hello(name) {
console.log("Hello " + name);
}

exports.hello = hello;


首先登录到cnpm服务器端,如下命令
npm login --registry=http://192.168.8.200:7001
如下图:
nodejs搭建CNPM本地库管理
文章图片



打开本地的包文件所在目录,执行如下命令:
npm publish --registry=http://192.168.8.200:7001

3.2 包的取消发布 npm unpublish --registry=http://192.168.8.200:7001 包名@版本
如下图,取消名为 @yixiang/testone 的包的发布

nodejs搭建CNPM本地库管理
文章图片

3.3 包的安装 命令
npm install --registry=http://192.168.8.200:7001包名@版本

例子:
npm install --registry=http://192.168.8.200:7001@yixiang/one@1.0.0
【nodejs搭建CNPM本地库管理】

    推荐阅读