關於npm相信做爲前端開發工程師必定不陌生,不過大部分人基本上只會使用3個命令,npm install
,npm run dev
,npm run build
,不過本文並不介紹npm常見的命令,本文主要介紹了我司內網npm的搭建方式,和前端開發在使用過程當中經常會遇到的問題,但願你們在使用過程當中可以對其瞭解更深入,本文閱讀時間約須要5分鐘。前端
我司的內網npm倉庫是在2017年中旬開始搭建並使用的,在此以前你們都是採用複製粘貼的方式來搬運nodemodules,17年中旬開始在內網搭建了一套cnpm內網倉庫,主要採用淘寶開源的cnpm倉庫,當時尚未打通內網訪問淘寶鏡像的地址,所以倉庫更新包仍是要每隔一段時間纔會去更新一下,致使內網一些包的版本老是不是最新的;java
19年開始公司開始採用nexus從新部署了一套私有倉庫,用該方案搭建主要是能夠一套倉庫同時兼顧各種開發語言,同時直接打通了鏡像源地址,讓內網無需再爲包沒法下載或者版本更新不及時的事情發愁。node
官方部署github地址: https://github.com/cnpm/cnpmj...python
官方部署github地址:https://github.com/sonatype/d...nginx
目前我司上述兩種倉庫都依然在內網並存,對於上述兩種倉庫有以下建議:git
npm install
下載遇到404
問題npm config get registry
查看當前倉庫地址是否指向內網的倉庫npm install --ignore-scripts
該命令能夠跳過該腳本的下載(大部分遇到的都是node-sass這種包會有腳本,後文會講解如何在內網安裝這種包)若是公司有內網開發的話,不少同窗應該會遇到這個問題,每每你們的作法可能都是從外網拷貝傳到內網指定目錄下,但這種方式過於繁瑣,可維護性比較差,那麼目前業界是怎麼作的呢?github
目前作的比較好的是淘寶,他們的作法是定時同步github上面的node-sass到本身的服務器上,而後開發人員在本地命令行中修改node-sass下載腳本的地址便可docker
npm config set SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass
npm
那麼對應到各位的公司裏面應該如何作呢?
主要有以下兩個方案:json
1. 公司內網服務器nginx配置轉發路由,並讓機房開通下面代理淘寶地址的權限,nginx配置以下: ... location ^~ /mirrors/ { proxy_pass http://cdn.npm.taobao.org/dist/ } ... 2. 前端開發在本地命令行中修改binary_site的地址(xxx是內部服務器本身的ip): npm config set SASS_BINARY_SITE=http://xxx.xxx.xxx/mirrors/node-sass 3. 執行下載命令,便可正常下載node-sass npm install node-sass
npm config set SASS_BINARY_SITE=http://gitlab.xxx.xxx/node-sass
淘寶鏡像地址: https://npm.taobao.org/mirrors
另外,上述方案不只僅適用於node-sass
,一樣適用於全部相似node-sass
須要下載腳本的包,好比electron
,puppeteer
...等等,算是一個通用的解決方案,建議使用第一種代理通道的方案,向公司申請下權限便可
目前我司在使用nexus做爲倉庫的過程當中遇到以下另個問題:
遇到這種狀況,只須要稍等片刻,而後再從新多執行幾回npm install便可
ps:雖然該種狀況一會能好,和網絡關聯性較大,但筆者強烈懷疑是nexus內部機制的一些bug,一些超時時間和重試機制設置作的並很差
接下去會按照上述搭建代理通道的方式來解決該問題
package-lock.json是在學習了yarn.lock以後在npm5版本上面新增的功能,該文件的主要做用是用來鎖住package.json中的版本號,使得每一次下載的npm包的版本都是同樣的,而且下載的來源也都是同一個。
不過我的有不同的見解,目前從開發實踐中來看建議你們不要將package-lock.json提交到git上做爲版本管理;主要是因爲目前的包遵循semver語義化版本的原則來進行更新包的,基本上不太會出現小版本升級致使api變動,靠譜的包升級都是修復bug或者是相關優化,若是把package-lock.json加入版本管理以後,後面該包修復bug業務方更新起來是一個比較麻煩的事情,若是該包使用的業務方過多,那麼要推進你們一塊兒改也是比較費時費力的,而不鎖版本的好處就在於開發人員能夠無感知的就能夠在業務開發時修復一些隱藏的bug,而不用每次特意去修改某個包的版本號,所以推薦你們無需將package-lock.json歸入版本管理。
不少公司或多或少都會有內網,搭建npm私服也是必經之路,開發人員若是對於npm沒有基本的認識,通常遇到問題很難明白其中發生了什麼,但願本文給你們介紹的npm知識可以幫助你們之後更好的工做,若有不對之處,歡迎指正~