NPMパッケージを評価する方法


最近書いたarticle どのように反応をスピードアップするには、他のものの間では、ホイールを再発明の代わりにパッケージを使用して助言する.たとえば、独自の実装を構築する代わりに、モーダルライブラリを使いたいと思います.(私は「マシュシストとサディスティックな指導者を含む」と言います.)
ここで、私の前の推薦への資格に従います.サードパーティ製ソフトウェアの利用リスク悪意のあるパッケージは、ほぼ毎週ニュースを作る.何百万もの開発者時間は、非推奨ライブラリから移行することに費やされました.
例として、持続可能性、パフォーマンス、およびセキュリティに対するリスクを評価する様々な大部分の定量的軸に沿って、いくつかの一般的な反応コンポーネントライブラリを比較します.パッケージを選ぶ際に確かに重要な要素ですが、APIとUIのような主観的な懸念を掘り下げません.このオープンソースのソフトウェアの中でも、リスクプロファイルの違いは厳しいです.
  • Chakra UI
  • Evergreen
  • Antd
  • Base Web
  • 長命


    開発者は星が大好きです.彼らは倉庫の品質の事実上の尺度です.しかし、それらは、Evergreen(私はセグメントのコンポーネント・ライブラリの上でしゃれに抵抗することができませんでした)である可能性のあるミステリーのメトリックを時々不完全です.他の一般的な指標は、多くのリポジトリがこのプロジェクトを使用しているか、どのように多くの貢献者がいるか、そしてどの組織がプロジェクトをスポンサーにしているかである.以下はコンポーネントライブラリのスタック方法です.
    パッケージ

    使用する
    貢献者
    会社スポンサー
    チャクラウイ
    12.4 k
    638年
    246年
    常緑
    10.3 k
    1626年
    105
    セグメント
    AND
    64.8 k
    5000 +
    1305年
    ベースウエブ
    5.6 k
    1012年
    177年
    アバウト
    ANDは、残りの上によく立っていますが、これらのライブラリのすべてが確立されます.それは確かに非難の危険ではない.ANTdの明確な優位性への警告は、その年齢です.それは、これらの他のライブラリの前にも長い間人気を得たpackage.json したがって、より多くの星、ユーザーなどを獲得.年間の唯一の主要な競合他社のUIだった.
    どんなパッケージをインストールする前に、私は典型的にTim Qian 'ファンタスティックtool . ANDの利点は明確です.

    ANTdは我々のチャートのスケールをほぼ中断するので、我々の新人をより詳しく見ましょう:

    ここでは、我々は大幅に異なる軌道を見ます.単独でスターカウントから、1つはチャクラUIと常緑が養子縁組に関してほぼ等しいと仮定するかもしれません、しかし、チャクラUIは明らかにその競争相手を凌いでいます.これらのライブラリのすべては星の最初のバーストを受けたが、チャクラだけが昨年の成長を維持している.
    あなたがパッケージを評価するとき、あなたが企業後援を優先して、セグメントのEvergreenとUberのベースウェブへの選択を狭めたと言います.Evergreenは、より高いスターカウントと養子縁組を与えられた明確な勝者のように見えるかもしれません.エバーグリーンが不足する場所は、その寄与者とそのコミット周波数の分布にある.ここではactivity そのトップ6の貢献者から:

    トップ3の開発者の外の常緑に重要な貢献者はほとんどなかった.さらに驚くべきことは、それらの3つの中心的な貢献者のうちの2人が1年以上で活発でなかったということです.ベースの方法compares :

    ベースWebもまた、貢献のややトップの重い配布を持っているが、それはエバーグリーンのよりも同等であり、そのトップの貢献者はまだアクティブです.一方、常緑の全重量は、残りのようですmshwery 'sの肩.
    コード頻度グラフは、同様の話をします.ベースWebへの貢献はずっと一貫しています.
    Evergreen

    Base Web

    成功した技術者によって支持された図書館は、より永続的である傾向があります(反応自体が最も重要な例です)、彼らは彼ら自身の危険を運びます.時には1つまたは複数のエンジニアが会社内のオープンソースライブラリを擁護する.それらの支持者が去るとき、プロジェクトは機関の購入なしで枯れることができます.ANDやチャクラのようなより分散したパッケージは、政治的無関心に抵抗しています.

    パフォーマンス


    同じことをするソフトウェアは2つのサイズで根本的に異なるかもしれません.Moment.js 最も人気のある日付の操作ライブラリは、1週間あたりの1200万以上のダウンロードと、まだそれはよく木を振ることはありませんし、プロジェクトに300 KBを追加します.Day.js ほぼ同じAPIを持ち、わずか2 KBです.実際、瞬間.現在のJSrecommends 使用日.代替案としてのJSと他の日付ライブラリ
    それぞれのコンポーネントライブラリのコストは必須ですBundlephobia :
    パッケージ
    ミニサイズ
    シェイブル
    副作用
    依存
    Chakra UI
    363.3 KB
    はい
    なし
    44
    Evergreen
    795.3 KB
    はい
    なし
    17
    Antd
    1.2 MB
    はい
    はい
    45
    Base Web
    60.9kB
    はい
    なし
    22
    ANTdはパフォーマンスに関して明白な敗者です.ところで、瞬間.JSはそのサイズの約20 %を占めている.ANDパッケージ全体をダウンロードするには、新興3 Gでほぼ7秒かかります.ANTdが副作用を持っているという事実は、等しく関連しています.副作用(モジュールの外部で何らかの振る舞いを実行するコード)はトレーズハッキングを妨げる.バンドルは、必要な外部効果を持つことができるので、副作用を持つモジュールを安全に削除することはできません.
    Bandlephobiaが提供するデータは有益ですが不完全です.あなたのアプリケーションのサイズに対するパッケージの影響は、そのパッケージの多くが木の揺れであるならば制限されるかもしれません.アプリケーションのコンテキストでそのサイズを正確に評価するには、ツールを使用しますWebpack Bundle Analyzer , これは、バンドルコンテンツのツリーマップの可視化を生成します.

    セキュリティ


    最も安全なパッケージは人気があり、よくメンテナンスされており、川下の依存性を最小限にする必要があります.たとえライブラリが何百万ものダウンロードを持っていても、それがこれらの追加基準を満たさないとき、そのリスクはより高いですevent-stream 誰かに出版権を与えたadded a malicious downstream dependency ). パッケージが人気があるならば、より多くのユーザーはすぐにセキュリティ問題を特定するためにあります;それがよく維持されるならば、より多くの開発者がそれをパッチするためにあります;そして、依存関係がほとんどなければ、最初にリスクが少ない.
    私たちが調べたコンポーネントライブラリの全てはおそらく安全ですが、チャクラUIとANTDの多くの依存関係はそれらをより脆弱にします.依存関係をダウンロードした後、監査を行う必要がありますyarn audit or npm audit . これらのCLIコマンドは、パッケージ内のセキュリティ脆弱性を特定し、パッチを推奨します.理想的には、あなたも含めるyarn audit or npm audit すべてのプル要求で既知の脆弱性に対する依存性をチェックするために、あなたの連続統合パイプラインで.yarn audit 実際にはEvergreenの低リスク問題を明らかにした.
    ┌───────────────┬──────────────────────────────────────────────────────────────┐
    │ low           │ Denial of Service                                            │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Package       │ node-fetch                                                   │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Patched in    │ >=2.6.1 <3.0.0-beta.1|| >= 3.0.0-beta.9                      │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Dependency of │ evergreen-ui                                                 │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ Path          │ evergreen-ui > glamor > fbjs > isomorphic-fetch > node-fetch │
    ├───────────────┼──────────────────────────────────────────────────────────────┤
    │ More info     │ https://www.npmjs.com/advisories/1556                        │
    └───────────────┴──────────────────────────────────────────────────────────────┘
    
    上記の勧告は9月10日に公開され、9月28日にエバーグリーンの最新版が公開された.問題は不条理かもしれませんが、Evergreenがそのリリースまたはそれ以降のコミットでそれを修正しなかったという事実は、セキュリティに対する彼らの注意に関して不十分に反映するかもしれません.
    ソフトウェアが世界を食べたならば、オープンソースソフトウェアはそれを進めます.パッケージを評価するとき、慎重にあなた自身があなたのソファーの代わりになめらかな、軽快なユニコーンを土曜日の夜にあなたの全体のアプリケーションがあなたのバミューダの海岸からどこかである管理者から批評のために祈っている間、あなたの全体のアプリケーションのために引く要求を提出することを認めることを見つけます.

    アバウトアス


    アットCarrots 我々は、特にソフトウェアエンジニアのための雇用プラットフォームを構築している.あなたのgithub、スタックオーバーフローを接続することができます以上のあなたの履歴書よりも多くを誇示する.当社のアルゴリズムは、世界クラスの才能の間でランクを示し、トップ企業にあなたのプロフィールを表面化します.