咱們須要一個可以讓公司內部模塊穩定維護的私有倉儲,並且這個倉儲還可以穩定的提供經過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庫併發布到私有倉儲
這裏我提供一份支持發佈的私有庫文件,具體的請參考這裏