nodejs搭建CNPM本地库管理

前言

随着Nodejs开发的项目越来越多,Node项目管理就成了一个需要思考的问题了。如果所有项目都开源统一用 NPM 进行管理也没什么问题,但总有一些是我们不希望的完全开放的代码,作为企业是核心秘密保留在公司内部,这个时候就需要在公司内网也搭建一套 NPM 依赖管理系统。CNPM正好就提供了这个功能。从Github上CNPM的主页看,CNPM由国内Alibaba团队开发维护。

1. CNPM是什么?

CNPM 是一个Nodejs的库,致力于打造私有的 NPM 注册服务。当然,除了私有库功能以外,CNPM官网 (http://cnpmjs.org/)还提供了NPM同步的服务。CNPM官方发布的架构图:

nodejs搭建CNPM本地库管理_第1张图片

从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

 

安装依赖包之前,先要升级NPM的版本

命令如下:

npm install -g npm

执行命令安装依赖包

npm install

缺少依赖包的报错如下图:

nodejs搭建CNPM本地库管理_第2张图片

2.2 创建数据库并导入项目数据表

命令如下:

mysql -uyixiang -p cnpmjs < docs/db.sql

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

 

nodejs搭建CNPM本地库管理_第3张图片

2.3 修改cnpm项目的配置文件

进入cnpmjs.org目录中的config目录并创建文件 config.js 如下图:

nodejs搭建CNPM本地库管理_第4张图片

编辑 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: '[email protected]',

    },

    syncModel: 'none'//默认有none ,exist,all,此处设置为none,即不同步npm源已有的库至本地,如果设置为exist,则会同步线上npm源存在的模块,比如,当你执行安装某线上模块时,则会把线上该模块版本全部同步至本地库

 }

该配置会覆盖index.js的配置

2.4 添加端口及启动cnpm服务端

Vim /etc/sysconfig/iptables

如下图:

nodejs搭建CNPM本地库管理_第5张图片

 

启动cnpm服务器

命令如下:

node --harmony dispatch.js

执行后如下图

nodejs搭建CNPM本地库管理_第6张图片

 

2.5 添加cnpm管理员用户

添加cnpm管理员用户用于发布私有包,因为cnpm必须是admin用户才能进行publish

命令如下:

在cnpm服务器192.168.8.200中添加名为admin密码为admin邮箱为[email protected]

npm adduser --registry=http://192.168.8.200:7001

Username: admin

Password: admin

Email: (this IS public) 必须为上面配置的邮箱,即[email protected]

 

如下图:

 

 

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本地库管理_第7张图片

 

打开本地的包文件所在目录,执行如下命令:

npm publish --registry=http://192.168.8.200:7001

 

3.2 包的取消发布

npm unpublish --registry=http://192.168.8.200:7001 包名@版本

如下图,取消名为 @yixiang/testone 的包的发布

 

3.3 包的安装

命令

npm install --registry=http://192.168.8.200:7001包名@版本

 

例子:

npm install --registry=http://192.168.8.200:7001@yixiang/[email protected]

 

你可能感兴趣的:(nodejs搭建CNPM本地库管理)