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安裝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM