cnpm是企業內部搭建npm鏡像和私有npm倉庫的開源方案。它同時解決了現有npm架構的一些問題。
為什么企業需要私有NPM
主要有如下理由:
- 確保npm服務快速、穩定:對於企業來說,上線生產系統的時候,需要花半小時甚至更久等待npm模塊依賴安裝完畢,是不可接受的。部署鏡像后,可以確保高速、穩定的npm服務。
- 發布私有模塊:官方的npm上的模塊全部是開源的。一些與企業業務邏輯相關的模塊可能不適合開源。這部分私有的模塊放在私有NPM倉庫中,使用起來各種方便。
- 控制npm模塊質量和安全:npm上的模塊質量參差不齊,搭建私有倉庫,可以更嚴格地控制模塊的質量和安全,只有經過審核的模塊才允許被加入私有倉庫。
cnpm的特點
- 壓縮包等文件從數據庫中分離,放在CDN上,減輕了數據庫的壓力,提高了訪問速度。
- 使用MySQL替換了CouchDB,更容易部署。同時由於大部分開發者更熟悉MySQL,因此架設起來更方便。
- CDN和MySQL都可以方便地擴展。

5分鍾部署
部署cnpm只需5分鍾。
依賴
- Node
- MySQL
- Redis
- qiniu CND (或其他CDN)
部署過程
獲取代碼
git clone git://github.com/fengmk2/cnpmjs.org.git $HOME/cnpmjs.org cd $HOME/cnpmjs.org
創建MySQL表
; mysql -u yourname -p
mysql> use cnpmjs; mysql> source docs/db.sql
然后編寫配置文件config/config.js:
module.exports = { debug: false, enableCluster: true, // enable cluster mode mysqlServers: [ { host: 'localhost', port: 3306, user: 'cnpmjs', password: 'cnpmjs123', } ], mysqlDatabase: 'cnpmjstest', redis: { host: 'localhost', port: 6379, }, nfs: null, //use your own CND here enablePrivate: true, // enable private mode, only admin can publish, other use just can sync package from source npm admins: { admin: 'admin@cnpmjs.org', }, syncModel: 'exist' };
安裝依賴
make install
啟動
; npm run start Starting cnpmjs.org ... Start nodejs success. PID=27175
好了,部署完成!
客戶端設置
服務跑起來之后,企業員工需要在自己的電腦上配置下客戶端。
首先安裝cnpm客戶端:
npm install -g cnpm
在自己的腳本的啟動文件(例如.zshrc或.bashrc)中添加別名:
echo "#lnpm alias\nalias lnpm='cnpm --registry=http://localhost:7001\ --registryweb=http://localhost:7002\ --cache=$HOME/.npm/.cache/lnpm\ --userconfig=$HOME/.lnpmrc'" >> $HOME/.zshrc && source $HOME/.zshrc
注意用自己的倉庫信息替換上面命令的相關部分。
之后就可以用lnpm命令訪問企業的內部NPM了,各種接口和NPM一樣。
注意,目前cnpm的權限控制比較簡單,只有admin用戶有權publishNPM模塊。如果你的企業需要靈活的權限控制,需要自行開發。
