前言
前段時間看到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上也試下~~
參考:
