選擇 npm 包時避免踩坑的五條建議
每個開發(fā)人員都使用過 npm install 安裝依賴。截止目前 NPM 平臺上已經(jīng)托管超過 190w 個包了,面對茫茫多的 package,在選擇第三方 NPM 包時應(yīng)該關(guān)注些什么?
這里為大家介紹 五 條建議。
1. 檢查開源許可證(License)
開源許可證是一種法律許可。通過它,版權(quán)擁有人明確允許,用戶可以免費地使用、修改、共享版權(quán)軟件。
版權(quán)法默認禁止共享,也就是說,沒有許可證的軟件,就等同于保留版權(quán),雖然開源了,用戶只能看看源碼,不能用,一用就會侵犯版權(quán)。所以軟件開源的話,必須明確地授予用戶開源許可證。
可以在 NPM 平臺上查看包的 License
License 通常分兩大類:"CopyLeft( 著佐權(quán) )" 和 "Permissive( 寬松式 )":
- CopyLeft:如果你使用了這個包,那么你的代碼也必須開源。這對一些商業(yè)化的項目不太友好,比如 GPL 和 LGPL 協(xié)議。
- Permissive:對包做了最低限度的使用限制,允許閉源,可以說幾乎沒有限制,但是各自又有一些區(qū)別,具體見下圖。
我們可以用 license-checker [1] 工具來一次性檢查項目中的 NPM 包是否都是合規(guī)的。
2. 看貢獻頻率和下載量
NPM 平臺也可以查看包的每周下載量和趨勢圖,數(shù)字越大意味著使用的人越多。
由于社區(qū)里有很多功能類似的包,比如 moment.js 和 dayjs 這類時間日期庫。 NPM trends [2] 可以同時比較多個包的下載量增長趨勢,從而更直觀地了解它們的受歡迎程度。
另外,GitHub 倉庫的 stars、 forks、 commit frequency 和 contributors 等相關(guān)指標也可以側(cè)面反映受歡迎程度。
3. 權(quán)衡包體積大小
對于前端來說,優(yōu)化性能最直接的手段就是 降低代碼包大小 。所以選擇第三方包時,也要考慮它的包體積。
bundlephobia [3] 可以對包體積進行可視化分析。從下圖可以看出, moment.js 打包后會有將近 300 kB,gzip 壓縮后會有 70kB。
而 dayjs 打包后只有 6 kB ,遠小于 moment.js 。
對于像微信小程序這樣對代碼包大小有明確限制的項目來說,輕量級的 dayjs 是更好的選擇。
4. 是否有大型團隊在進行維護
盡管大部分的 NPM 包都包含較全的文檔,但是往往也都存在一些兼容性、JS 異?;蛐阅芟嚓P(guān)的 issue。因此如果背后有大型團隊在進行維護,我們使用起來會更放心。
可以關(guān)注以下幾個方面:
Used By 和 Contributors 數(shù)量
數(shù)量越多意味著你不是早期用戶,很多開發(fā)者已經(jīng)幫你趟過水了。
Contributors 視圖
可以直觀地看到貢獻者的貢獻頻率,如果很多都頻繁貢獻,意味著倉庫受到社區(qū)更多的關(guān)注和支持。
Community Standards
將倉庫與開源社區(qū)的規(guī)范標準進行比較,達到的標準越多意味著這個倉庫越成熟。
5. 評估安全性
包安全性是選擇 NPM 包的另一個關(guān)鍵因素,在倉庫的「 Security 」tab 下可以看到它的安全策略。
如果維護者已經(jīng)采取了措施來確保安全性,會顯示 已激活 。
對于項目中已有的 NPM 依賴,可以使用命令 npm audit 來進行安全性檢查。
npmgraph [4] 能夠?qū)ΠM行依賴可視化分析來確保沒有安全漏洞,然后再安裝到項目當(dāng)中。
總結(jié)
回顧一下選擇第三方 NPM 包的 5 條最佳實踐:
- 檢查開源許可證
- 看貢獻頻率和下載量
- 權(quán)衡包體積大小
- 是否有大型開發(fā)團隊在進行維護
- 評估安全性
在做選擇時,我們最好能根據(jù)以上維度產(chǎn)出一份調(diào)研文檔,并在團隊內(nèi)分享和討論,最終得出一致的結(jié)論。