如何搭建一個私有npm倉庫(splite數據庫)

業界主流的私有npm倉庫搭建的主流方案有如下幾種:

1、付費購買

2、使用 git+ssh 這種方式直接引用到 GitHub 項目地址

3、使用Verdaccio

4、使用cnpmjs.org

第一種,一是考慮到公司可能不會提供經費,二npm在國內訪問很慢,就是花錢也買不到好的體驗。

第二種,不能更新即npm update,不能使用semver(語義化版本規范)。

那么較好的選擇就只剩下第三種和第四種。

下面將分別使用基于Verdaccio和基于cnpmjs.org這兩種方案來搭建私有npm倉庫并進行總結。

1. Verdaccio方案篇

1.1 服務端部署

安裝:npm install -g verdaccio

啟動:verdaccio

warn? --- config file - C:\Users\Administrator\.config\sinopia\config.yaml

warn? --- http address - http://localhost:4873/

此時訪問localhost:4873,可獲取html文件并且服務端響應正常,表示安裝成功。

配置

運行verdaccio,自動生成的工作目錄如下(通過第一個warn可以看到具體路徑):

C:\Users\Administrator\.config\sinopia\config.yaml

|-- config.yaml //存放所有配置信息

|-- htpasswd? ? ? ? //存放所有賬戶信息

|-- storage? ? ? ? //存放私有npm包及緩存公有包

? ? ?|-- npm_test

config.yaml默認配置

storage:?F:\verdaccio\storage?//npm包存放的路徑

auth:

? ? htpasswd:

? ? ? ? ? file: ./htpasswd //保存用戶的賬號密碼等信息

uplinks:

? ? npmjs:

? ? ? ? ? url: https://registry.npmjs.org/?//拉取公共包的地址源,默認為npm的官網,可以使用淘寶的npm鏡像地址

packages: //配置權限管理

??'@*/*':? ??

? ? ? access:?$all? ??

? ? ?publish:?$authenticated

'*':

access:?$all

? ?publish:?$authenticated

? ?proxy:?npmjs

logs:

-?{type:?stdout,?format:?pretty,?level:?http}

listen:?0.0.0.0:4873? ?// 設置可以同域名訪問

i18n:

??web:?zh-CN? // 設置管理界面默認中文

1.2 客戶端配置

配置npm registry(建議客戶端使用nrm 進行npm registry地址管理和切換)

npm install -g nrm //?安裝

nrm add verdaccio??http://192.168.xx.xx:4873? //?添加verdaccio倉庫地址

nrm use verdaccio //?切換私有倉庫

nrm ls //?查看所有倉庫地址(星標為當前倉庫源)

1.3 發包

切換到私有倉庫之后,發包的操作跟npm發包基本無差別。

npm login

npm whoami

npm publish

注: 版本號重復的情況再次發布的包不會主動更新,并且發布不會有錯誤提示,更新包務必更新版本號。發布成功后私有倉庫站點會顯示包情況,README.md文件會作為詳情描述展開。


2.cnpmjs.org方案篇

2.1 服務端部署

官方依賴如下圖:

安裝:cnpmjs.org

npm i -g cnpmjs.org

cnpmjs.org默認安裝路徑:D:\Program Files\nodejs\node_global\node_modules\cnpmjs.org

修改 :默認安裝路徑\config\index.js

/* * server configure //服務器配置 */?

registryPort: 7001, //倉庫訪問端口(執行發布安裝)

?webPort: 7002, //展示查詢站點訪問端口?

bindingHost: '', //監聽綁定的 Host,默認127.0.0.1,外網訪問注釋掉此項即可

?/** * database config //數據庫相關設置 */?

database: {

????db: 'cnpmjs_test', //數據庫名稱?

????username: 'root', //數據庫訪問賬號?

????password: '', //數據庫訪問密碼?

????dialect: 'sqlite', //使用數據庫,默認sqlite

????host: '127.0.0.1', //數據庫訪問IP,通常127.0.0.1

????port: 3306, //數據庫訪問端口,通常3306

// 模塊文件存儲,默認將發布的私有模塊跟緩存公共模塊存儲在本地文件系統中,路徑~/.cnpmjs.org/nfs ,也就是模塊文件都存儲在這個目錄下;或者可以選擇三方儲存方式比如七牛等,著這里配置插件;也支持接口開發擴展儲存;

nfs: require('fs-cnpm')({

?????dir: path.join(dataDir, 'nfs')

}),

// registry url name //模塊注冊列表訪問域名,默認r.cnpmjs.org,安裝模塊時會到這個域名下查找,這個默認設置略坑,建議沒有外網域名的先清空回頭再配

registryHost: '',

// default system admins //默認管理員賬號

admins: {

admin: 'admin@cnpmjs.org',

},

/* * registry mode config 私有模塊發布相關配置*/

//是否開啟私有模式,默認為 false; 私有模式下只有管理員能發布模塊,其他賬號只有同步權限 ;非私有模式,注冊用戶都可以發布模塊

enablePrivate: false,

//若為非私有模式發布則此項必填,非管理員發布模塊式命名必須以scopes字段開頭,模塊命名示例“@cnpm/packagename”

scopes: [ '@cnpm', '@cnpmtest', '@cnpm-test' ],

// 私有模塊非scopes白名單,各種非以scope方式發布的老模塊的白名單管理,數組形式維護

privatePackages: [],

//npm官方registry地址,不會直接從這個地址同步模塊,但有時會從這里獲取模塊信息,除非必要請勿更改

officialNpmRegistry: 'https://registry.npmjs.com',

officialNpmReplicate: 'https://replicate.npmjs.com',

//同步模塊上游registry地址

sourceNpmRegistry: 'https://registry.npm.taobao.org',

/上游registry是否是cnpm,默認true,若要使用npm官方地址作為同步上游,請設置為false

sourceNpmRegistryIsCNpm: true,

//若安裝時模塊不存在,是否向源registry進行同步,默認true

syncByInstall: true,

// 同步模式選項 : none: 不進行同步,只管理用戶上傳的私有模塊,公共模塊直接從上游獲取 ; exist: 只同步已經存在于數據庫的模塊 ; all: 定時同步所有源registry的模塊

syncModel: 'exist', // 'none', 'all', 'exist'

// 同步時間間隔,默認10分鐘

syncInterval: '10m',

// 是否同步模塊中devDependencies,默認false

syncDevDependencies: false,

//用戶賬號系統接入,可以擴展接入公司的賬號系統

userService: null,

數據庫準備

? ? 安裝:npm install -g split3

? ? 初始表格:執行?默認安裝路徑\models\init_script.js

啟服務

npm install -g pm2 // 進程管理器

pm2 start dispatch(默認安裝路徑\dispatch.js)

pm2 stop id

pm2 delete id

訪問對應的IP加訪問端口即可看到,展示站點如下圖


圖7 start之后示意圖

我們可以搜索我們想要的包,如果沒有可以選擇sync進行同步。


圖8 選擇同步

選擇同步之后,后有如下同步過程


圖9 同步過程

2.2 客戶端配置

nrm add??localCnpm 192.xxx.x.x:7001

2.3 發布私有模塊

同上

如果你是一個想要擁有私人npm倉庫的個人開發者或者小團隊,Sinopia完全可以滿足需求;如果想要對私人npm服務做更多個性化定制方案,那么cnpm的擴展性支持更加友好。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容