npm私服搭建
如何搭建 npm 私服?
npm私服搭建工具不多,主要有三個(gè):Verdaccio、sinopia、nexus。
Verdaccio
號(hào)稱零配置的私服,直接用 node 啟動(dòng)就行,還提供 docker 版本。體驗(yàn)下來(lái),我覺(jué)得好處就是安裝特別省事,無(wú)需太關(guān)注復(fù)雜的技術(shù),也可以不用太配置,還帶有個(gè)簡(jiǎn)潔的 UI 頁(yè)面。單純是 npm 私服的話,我認(rèn)為用它非常適合。而且體驗(yàn)和 npm 官網(wǎng)非常類似,支持的 npm 語(yǔ)法也非常好。
sinopia
一樣號(hào)稱零配置的私服,整體和 Verdaccio 差不多。
功能比 Verdaccio 更簡(jiǎn)單,也具有簡(jiǎn)潔的 UI 頁(yè)面。簡(jiǎn)單體驗(yàn)了下,大體也和 Verdaccio 差不多。感覺(jué)就是 Verdaccio 的精簡(jiǎn)版吧。
Nexus
非常強(qiáng)大,各個(gè)公司基本上用的都是它!因?yàn)樗梢酝瑫r(shí)處理 maven npm 等私有倉(cāng)庫(kù)。所以為了省事,很多公司就不會(huì)單獨(dú)再部署其他私服了。
下面是Nexus示例:
官網(wǎng)下載好包后,解壓縮就可以了,以 MacOS為例:
首先確保服務(wù)器上有 java 環(huán)境,進(jìn)入下載后Nexus目錄后,執(zhí)行腳本啟動(dòng):
./nexus-3.28.0-01/bin/nexus start啟動(dòng)后訪問(wèn)地址:http://localhost:8081/
此時(shí)如果你點(diǎn)擊登錄按鈕,會(huì)提示:
Your admin user password is located in/Users/xxx/Applications/nexus-3.28.0-01-mac/sonatype-work/nexus3/admin.password on the server.
他告訴了密碼的位置,可以到機(jī)器上查詢下,之后使用 admin 賬號(hào)登錄。
點(diǎn)擊頂部的設(shè)置按鈕,左側(cè)選擇?Repository?-?Repositories,
之后選擇 Create repository,可以看到有 npm(proxy) npm(hosted) npm(group)。

npm(proxy)就是代理倉(cāng)庫(kù),可以緩存已下載的包,后續(xù)就不用下載了。它只能實(shí)現(xiàn)代理的功能,不能實(shí)現(xiàn)私有包的托管。
npm(hosted)就是存儲(chǔ)私有包的倉(cāng)庫(kù),可以允許提交包,但不能實(shí)現(xiàn)代理功能。
npm(group)就是將以上兩種倉(cāng)庫(kù)合并下,一個(gè)地址就能實(shí)現(xiàn)代理和私有包托管,免去來(lái)回切換地址的麻煩。
建立?npm(proxy)

Name隨意,就是區(qū)分。
Remote storage是遠(yuǎn)程代理地址,官方或者淘寶源https://registry.npmjs.org/,其他都不用管,默認(rèn)就好。
返回后,可以看到多了當(dāng)前新增記錄,后面有一個(gè)URL copy的按鈕。復(fù)制后就獲得了地址 http://localhost:8081/repository/npm-proxy/。
通過(guò)此代理 url,可以進(jìn)行訪問(wèn)代理。比如進(jìn)行安裝包,是完全可行的:
npm?install?xxx?--registry?http://localhost:8081/repository/npm-proxy/建立?npm(hosted)

Name 隨意,就是區(qū)分,其他都不用管,默認(rèn)就好。
返回后,可以看到多了一條npm-hosted記錄。
復(fù)制地址http://localhost:8081/repository/npm-hosted/。
這個(gè)地址不能用于代理,比如 [email protected],會(huì)提示找不到對(duì)應(yīng)包。
此時(shí)你不能通過(guò)npm adduser來(lái)增加賬號(hào),需要通過(guò)nexus來(lái)增加用戶。
首先要增加一個(gè)npm角色組,我分配了所有npm的權(quán)限,參見(jiàn)如下:

然后,新增一個(gè)賬號(hào),參見(jiàn)如下:

最后,還要修改Realms,把npm Bearer Token Realm加到右側(cè)激活區(qū):
處理Realms,否則后續(xù)操作可能會(huì)遇到如下錯(cuò)誤:
Unable?to?authenticate,?need:?BASIC?realm="Sonatype?Nexus?Repository?>?Manager"npm?login?--registry?http://localhost:8081/repository/npm-hosted/之后可以發(fā)布包了:npm publish --registry http://localhost:8081/repository/npm-hosted/這個(gè)倉(cāng)庫(kù)地址只能發(fā)布私有包,不能下載其他的公有包。
建立?npm(group)

Name 隨意,就是區(qū)分,
Member repositories,需要選擇已經(jīng)建立好的 2 個(gè) npm 倉(cāng)庫(kù),
Blob store,表示緩存位置,可以自己在建立一個(gè)存儲(chǔ)區(qū)域,這里用默認(rèn)的,
其他都不用管,默認(rèn)就好。
完成后,獲得新的地址:http://localhost:8081/repository/npm-group/。
使用此地址可以下載公共包,以及發(fā)布私有包。
但是發(fā)布私有包時(shí)候,會(huì)報(bào)錯(cuò),沒(méi)交錢(qián)的錯(cuò):
npm ERR! code E403npm ERR! 403 403 Forbidden - PUT http://localhost:8081/repository/npm-group/test- Deploying to groups is a PRO-licensed feature.See https://links.sonatype.com/product-nexus-repositorynpm ERR! 403 In most cases, you or one of your dependencies are requestingnpm ERR! 403 a package version that is forbidden by your security policy.
