MacPro 使用cnpmjs搭建私有npm服务

 前言

前段时间看到npm私有库cnpmjs.org,一直想试一下怎么搭建,直接就拖到现在了,太懒!

先简单介绍下cnpmjs.org吧:

cnpm的意思是Company npm。根据github上的介绍,翻译过来大概是:

基于koa,MySQL和 Simple Store Service的企业npm私有库和web端。

目标是为私人NPM提供一个低成本的维护和易于使用的解决方案

利用cnpmjs.org你可以:

1、搭建一个企业的npm私有库

2、搭建一个npm的镜像

3、搭建一个完全独立于npm的仓库来存放你想存放的东西

 

接下来,开始吧!

Mac系统和软件环境:

1 Mac OS X Yosemite 10.10.1
2 git: mac自带 V1.9.3
3 XCode: 6.1.1

1、安装MySQL

MySQL官网选择相应的版本下载后直接安装(用迅雷下载会靠谱一点),我安装的是

MySQL-Community Server(GPL) 5.6.22 Compiled for OSX10.8(X86_64),

安装完成后MySQL服务会默认启动。

2、(可选)安装MySQL Workbench

该步骤主要用于之后的脚本初始化和密码修改。安装完成后打开:

 

在界面上点击新建连接按钮:

 

mysql初始时,使用root用户,密码为空。
建好之后打开,接下来要修改root密码(如下图)。

 


对于命令行比较熟悉的,这个完全可以用命令行来操作。

3、安装nodejs

需要安装比较新的版本,对应与cnpmjs版本,否则可能会失败。
打开命令行窗口,新建一个目录用于存放nodejs,从github上拉取node的源码自己编译安装:

1 mkdir nodejs
2 cd nodejs
3 git clone git://github.com/ry/node.git
4 cd node
5 ./configure
6 make 
7 sudo make install

 安装完后测试一下:

 1 node -v 

输出:V0.13.0-pre

4、安装cnpmjs

从github上下载源码

1 git clone git://github.com/fengmk2/cnpmjs.org.git
2 cd cnpm.org
3 ls -l

 

这里主要会用到两个文件:
1) docs/db.sql 

这个是数据库初始化脚本,cnpmjs用到的表都在里面了。
利用上面的workbench执行这个脚本,脚本执行后会有如下表:

2)  config/index.js

系统配置脚本,可通过创建config.js文件来覆盖默认配置,或者直接修改index.js(不建议)。

这里需要注意的一点就是,在index.js里面有个叫做bindingHost的配置,这个意思是本地访问时的绑定地址,默认配置是127.0.0.1。也就是说本地你只能通过这个地址访问,如果使用localhost的话是访问不了的,用其他IP也不行。

创建config.js文件

vim ./config/config.js
  config.js文件的内容如下:
 1 module.exports = {
 2      debug: false, // 
 3      database: {
 4           db: 'cnpmjs',         // 默认为cnpmjs_test
 5           host: '127.0.0.1',    // 默认
 6           port: 3306,           // 默认
 7           username: 'root',     // 默认
 8           password: '你的密码',  // 默认为空
 9           dialect: 'mysql'      // 使用mysql,默认为sqlite, 还支持postgres,mariadb,暂时不支持oracle
10    },
11      syncModel: 'exist'         // 同步已存在的模块, 默认为none, 还有个选项为all
12  }

更多配置可参考config目录下的index.js文件。

5、启动服务

上述步骤都配置完成后,就可以启动cnpmjs服务了,如下图,输入命令:

1 node --harmony_generators dispatch.js 

启动服务后,在浏览器中输入:http://127.0.0.1:7002 ,如果看到下面这个页面就表示成功啦!

 

6、客户端使用

私有服务搭建好了,在客户端要怎么使用呢?

最简单的方式就是设置一下npm的registry就可以了:

1 npm config set registry=http://192.168.1.6:7001

当然,如果不想改变原先的registry,那就在每个命令后加个--registry参数就行了,例如:

npm install gulp -g --registry=http://192.168.1.6:7001

对于无法直接访问网络的公司内部的开发人员来说,还是设置下registry吧!

还有一种方式就是使用cnpmjs的客户端cnpm:

npm install -g cnpm 

  当然,cnpm也是需要设置registry的。

细心的童鞋可能发现了,打开网页和registry使用的端口不一样啊! 别担心,那是因为cnpmjs有默认的两个访问端口:

  1) 7001是registry端口,对应registryPort配置项

  2) 7002是web端口,对应webPort配置项

如果你不喜欢这两个默认的端口,可以自己修改,可以看下config/index.js配置文件,里面的注释写的很清楚了。

7、发布模块

对于大部分的情况,别人写好的模块已经基本够用了,但是有时候并不能完全符合自己的要求,或者领导要你写几个公共的模块用到项目中,这时候就需要自己编写模块,并发布到私有库中。cnpmjs就可以用来管理公司内部开发好的模块。 

首先在config/config.js中添加或者直接修改config/index.js文件,把其中admins中的admin改为你自己的email地址。

admins: {
    admin: 'aaa@qq.com'
}

修改完成后,重新启动服务。然后添加用户,因为只有admin用户才能发布,所以就添加admin用户:

1 npm adduser --registry=http://192.168.1.6:7001
2 Username: admin
3 Password: 设置密码
4 Email: (this IS public) 上面修改后的邮箱地址

添加完用户,登陆一下:

1 npm login --registry=http://192.168.1.6:7001

这里也会出现和添加用户一样的提示要你填写,因为刚刚添加过用户,所以直接回车用默认的。

1 Username: (admin) 
2 Password: (or leave unchanged) 
3 Email: (this IS public) (你的邮箱)

准备就绪了,下面简单写一个模块来测试一下:

1 vi testone.js
1 /*
2  * 公共模块
3  */
4 function hello(name) {
5         console.log("Hello " + name);
6 }
7 
8 exports.hello = hello;

编写package.json文件

1 vi package.json
1 {
2         "name": "testone",
3         "version": "1.0.0",
4         "main": "./testone.js",
5         "description": "A Common Module",
6         "author": "wyzfzu"
7 }

编写完之后,就可以发布啦:

1 npm publish --registry=http://127.0.0.1:7001

输出:testone@1.0.0

也可以加上 --verbose参数来查看更详细的日志。

安装测试一下,转到其他目录,输入命令:

1 npm install testone --registry=http://127.0.0.1:7001 

需要注意的几点:

  1) win7下 命令行要用管理员权限运行

  2) 模块目录下不要存放无关的文件

 

折腾了好久,终于搞定了,在此记录一下。准备在centos上也试下~~

 

参考:

1、CNPM搭建私有的NPM服务

2、使用cnpm搭建企业内部私有NPM仓库

3、mac下node js安装

posted @ 2014-12-10 23:50  wyzfzu  阅读(3504)  评论(2编辑  收藏  举报