咱们须要一个可以让公司内部模块稳定维护的私有仓储,并且这个仓储还可以稳定的提供经过npm install获取的安装包,那么cnpm来了~前端
CNPM是一个私有的Nodejs库,使用CNPM 有以下理由:node
确保npm服务快速、稳定:对于企业来讲,上线生产系统的时候,须要花半小时甚至更久等待npm模块依赖安装完毕,是不可接受的。部署镜像后,能够确保高速、稳定的npm服务。mysql
发布私有模块:官方的npm上的模块所有是开源的。一些与企业业务逻辑相关的模块可能不适合开源。这部分私有的模块放在私有NPM仓库中,使用起来各类方便。git
控制npm模块质量和安全:npm上的模块质量良莠不齐,搭建私有仓库,能够更严格地控制模块的质量和安全,只有通过审核的模块才容许被加入私有仓库。github
使用MySQL替换了CouchDB,更容易部署。同时因为大部分开发者更熟悉MySQL,所以架设起来更方便。web
部署简单:只须要五分钟sql
从CNPM的架构图中,咱们能够看出CNPM是对NPM作的镜像服务,CNPM会按期同步NPM的资源库,同时CNPM支持发布私有的库,这样就很是方便地集成了公有库和私有库,对于公司内部的开发者来讲,基本感受不到两种库的区别。数据库
从官方文档中,咱们看到CNPM服务器环境,只须要Node(0.11.12) + MySQL(>= 0.5.0),另外咱们还须要Linux的环境,接下来就让咱们动手本身搭建一个私有NPM的服务器npm
准备:数组
Linux 操做系统,如 Ubuntu 12.04.5 LTS
Node: v6.0.0
Npm: 3.8.6
数据库 ,如 MySQL: 5.5.40
Git客户端
复制代码
从github下载项目源代码,安装项目依赖
git clone https://github.com/cnpm/cnpmjs.org.git
cd cnpmjs.org
npm install
复制代码
在config目录下新建一个config.js 文件,能够参考官方推荐的一些配置
下面列出一些经常使用的配置说明
阅读了上面的配置,你可能会编写一份以下的配置文件
module.exports = {
debug: false,
enableCluster: true, // enable cluster mode
mysqlServers: [
{
host: 'localhost',
port: 3306,
user: 'root',
password: 'xxxxxx',
}
],
mysqlDatabase: 'cnpmjs',
enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm
admins: {
admin: 'example@example.com',
},
scopes:['@IModules'],
syncModel: 'exist'// 'none', 'all', 'exist'
};
复制代码
建立并初始化MySQL数据库
$ mysql -u yourname -p
mysql> use cnpmjs;
mysql> source docs/db.sql
复制代码
启动CNPM服务器,默认会打开两个端口,7001用于NPM的注册服务,7002用于Web访问。
node --harmony_generators dispatch.js
复制代码
或者 npm run start npm run dev:调试模式启动; npm run test:跑测试; npm run start:启动 CNPM; npm run status:查看 CNPM 启动状态; npm run stop:中止 CNPM。
浏览器访问CNPM私有仓库
127.0.0.1:7002
复制代码
终于正常了,这样就成功搭建了私有的NPM注册服务。
配置npm 源为公司私有仓库
npm config set registry http://cnpm.xxx.cn/ #这个是将上文IP映射的域名
复制代码
查看是否操做成功
npm config ls
复制代码
执行命令,来安装一个私有库(后面的文章会建立)
npm install --save @IModules/IUtils@0.2.0-snapshot
复制代码
载的时候指定咱们本身的私有库,这样就会从咱们本身的私有库中下载。若是私有库没有对应的库,CNPM会自动同步到NPM 找到咱们要下载的库和版本,先在CNPM中存一份,而后再传给客户端一份,运行原理和Maven的原理同样。 或者使用以下命令,临时安装 npm install winston --registry=http://127.0.0.1:7002
私有仓储创建起来了,后面就开始动手创建上文中提到的IUtils库并发布到私有仓储
这里我提供一份支持发布的私有库文件,具体的请参考这里