相信開發NodeJS的人
一定用過NPM這個套件管理工具
它是不錯用
但是有許多地方被人詬病
諸如:
效率問題
套件版本控制機制問題
最近剛好成為苦主
就來分享一下處理心得
(所以現在有不少人跳槽到Yarn陣營…)

這裡不談效率問題
我想NPM團隊應該會逐漸去改善
聽說5.X以上的版本有不錯的改進
至於版本控制問題
其實NPM設計出發點是沒問題的
前提是你必須遵照semver的版本號規則
若是你不依循就會造成別人編譯錯誤…
這邊簡單介紹如何避免或解決這些問題

第一
就是你的package.json
最好使用固定版本
預設 npm install XXXX –save
會在版本上加一個^
這往往是問題的來源
所以當你開發完
測試都沒問題後
記得一定要把版本固定下來


第二
就算要把所以套件引用的版本固定下來
因為套件彼此引用的關係複雜
你往往不知道別人怎麼引用的…
所以就需要使用把所有版本固定下來
這時就要依你的NPM版本來解決了
若是你的NPM在5.X以上
NPM會在npm install後
自動產生package-lock.json
但是npm 5.X在這塊一直有很多issue
從5.X一直改改改 改道5.1.X還在改改改
好像到5.4.2以上才穩定
所以建議一定要用5.4.2以上的版本
基本上作法就是
將產生package-lock.json放上版本控制系統
這樣就可以確保每次的可以用到相同的版本
除非你手動修該package.json的版本
或是移除一些套件 否則package-lock.json不會更新


亦或是
NPM 5.X以前的人呢
就用npm shrinkwrap
他會產生npm-shrinkwrap.json
一樣將他放置版本控制系統上
若往後package.json有動到
請執行以下

    rm -rf node_modules && rm npm-shrinkwrap.json
    npm install 
    npm shrinkwrap

重新產npm-shrinkwrap.json即可


希望以上能對用的NPM套件管理的人有幫助
有點暈~也許有天我也會跳槽到Yarn去試試…