npm(ソフトウェア)

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

npm
Npm-logo.svg
原作者アイザックZ.シュリューター。
開発者npm、Inc。GitHubの子会社、[1] Microsoftの子会社
初回リリース2010年1月12日; 12年前[2] (2010-01-12
安定リリース
8.3.2 [3] ウィキデータでこれを編集する / 2022年1月20日; 20日前 (2022年1月20日
リポジトリ
で書かれているJavaScript
プラットホームクロスプラットフォーム
タイプパッケージマネージャー
ライセンスArtistic License 2.0
Webサイトwww .npmjs .com

npm [4]は、npm、Incによって管理されているJavaScriptプログラミング言語のパッケージマネージャーです

npmは、JavaScriptランタイム環境Node.jsのデフォルトのパッケージマネージャーですこれは、npmとも呼ばれるコマンドラインクライアントと、npmレジストリと呼ばれるパブリックパッケージと有料プライベートパッケージのオンラインデータベースで構成されています。レジストリにはクライアントを介してアクセスし、利用可能なパッケージはnpmWebサイトを介して参照および検索できます。パッケージマネージャーとレジストリはnpm、Incによって管理されています。

頭字語

npm正式には「「npmは頭字語ではありません」の再帰的な頭字語の略語」です。[5] ただし、の最初のコミットはnpm「ノードパッケージマネージャー」と呼ばれていました。[6] 名前の拡張は2014年に変更されました。[7]

歴史

npmは完全にJavaScriptで記述されており、「見たモジュールのパッケージ化がひどく行われた」結果として、 PEARPHP)やCPANPerl )などの他の同様のプロジェクトからインスピレーションを得て、Isaac Z.Schlueterによって開発されました[8]

顕著な破損

  • 2016年3月、多くの人気のあるJavaScriptパッケージが依存していたと呼ばれるパッケージが、独学のソフトウェアエンジニアであるAzerKoçuluとKikの間の名前の争いの結果として公開されなかった後、npmはマスコミの注目を集めました[9][10] [11]パッケージは3時間後に再公開されましたが、[12]広範囲にわたる混乱を引き起こし、npmは今後同様のイベントを防ぐために、非公開に関するポリシーを変更しました。[13]left-pad
  • 2018年2月、バージョン5.7.0でsudo npm、Linuxシステムで実行するとシステムファイルの所有権が変更され、オペレーティングシステムが完全に破損するという問題が発見されました。[14]
  • 2018年7月、人気のあるパッケージのメンテナのnpmクレデンシャルが侵害され、バージョン3.7.2eslint-scopeの悪意のあるリリースが発生しました。eslint-scope悪意のあるコードは、実行中のマシンのnpmクレデンシャルをコピーeslint-scopeし、攻撃者にアップロードしました。[15]
  • 2018年11月、人気のあるパッケージのバージョン3.3.6への依存関係として悪意のあるパッケージが追加されたことが発見されましたevent-streamと呼ばれる悪意のあるパッケージには、特定のアプリケーションからビットコインを盗むflatmap-stream暗号化されたペイロードが含まれていました。npm管理者は、問題のあるパッケージを削除しました。[16] [17]
  • 2020年4月に、と呼ばれる小さなパッケージis-promiseにより、多くの大きくて重要なアプリケーションに依存しているため、サーバーレスアプリケーションと世界中の展開が停止しました。[18]
  • 2022年1月、人気のあるパッケージのメンテナがcolors変更をプッシュして、ガベージテキストを無限ループで印刷しました。メンテナはまた、npmで別の人気のあるパッケージ、、およびそのパッケージのリポジトリをクリアし、「アーロン・スワーツに実際に何が起こったのかfaker」というREADMEに置き換えました。[19]

説明

npmは、Node.jsインストーラーの推奨機能として含まれています。[20] npmは、リモートレジストリと対話するコマンドラインクライアントで構成されています。これにより、ユーザーはレジストリで使用可能なJavaScriptモジュールを使用および配布できます。[21] レジストリ内のパッケージはCommonJS形式であり、 JSON形式のメタデータファイルが含まれています。[22] メインのnpmレジストリで130万を超えるパッケージが利用可能です。[23]レジストリには提出のための審査プロセスがありません。つまり、レジストリで見つかったパッケージは、低品質、安全でない、または悪意のあるものである可能性があります。[22] 代わりに、npmは、パッケージが低品質、安全でない、または悪意のあるものであるためにポリシーに違反している場合、ユーザーレポートに依存してパッケージを削除します。[24] npmは、ダウンロード数や依存パッケージ数などの統計を公開して、開発者がパッケージの品質を判断するのを支援します。[25]

npmバージョン6では、開発者がインストールされたパッケージのセキュリティの脆弱性を特定して修正するのに役立つ監査機能が導入されました。[26]セキュリティの脆弱性の原因は、Node Security Platform(NSP)で見つかったレポートから取得され、npmがNSPを買収して以来npmと統合されています。[27]

使用法

npmは、特定のプロジェクトのローカル依存関係であるパッケージ、およびグローバルにインストールされたJavaScriptツールを管理できます。[28] ローカルプロジェクトの依存関係マネージャーとして使用する場合、npmは1つのコマンドで、package.jsonファイルを介してプロジェクトのすべての依存関係をインストールできます。[29]package.jsonファイルでは、各依存関係はセマンティックバージョニングスキームを使用して有効なバージョンの範囲を指定できる ため開発者はパッケージを自動更新すると同時に、不要な重大な変更を回避できます。[30] npmは、開発者がパッケージに特定のバージョンのタグを付けるためのバージョンバンピングツールも提供します。[31] npmはpackage-lock.json[32]も提供しますでセマンティックバージョニングを評価した後、プロジェクトで使用される正確なバージョンのエントリを持つファイルpackage.json

代替案

モジュラーJavaScriptをインストールするためのnpmのオープンソースの代替手段は多数あります。たとえば、、、、およびYarnied2016年10月にFacebookによってリリースされました。 [33]これらはすべてパブリックnpmレジストリと互換性があり、それを使用します。デフォルトでは、異なるクライアント側のエクスペリエンスを提供します。通常は、npmクライアントと比較してパフォーマンスと決定性の向上に重点を置いています。[34]pnpmnpmd

JSConf 2019で、npmの元CTOは、JavaScriptコモンズの分散化を目的とした新しいフェデレーションパッケージレジストリであるEntropicを発表しました。[35]

レジストリ

内部的には、npmはNoSQL CouchDBに依存して公開されているデータを管理します。[36]

も参照してください

参考文献

  1. ^ 「JavaScriptパッケージマネージャーNpmを買収するためのMicrosoft所有のGitHub」GeekWire2020年3月17日。
  2. ^ 「npmの初期リリース」GitHub 2019年1月5日取得
  3. ^ https://github.com/npm/cli/releases/tag/v8.3.2
  4. ^ 「最初のドロップ。醜い、大ざっぱな、そしてまだ完全に「プログラムでの作業…・npm / cli @ 4626dfa」。GitHub
  5. ^ クラーク、ダーシー(2021年2月12日)。「npm-JavaScriptパッケージマネージャー」GitHubnpm 2021年10月5日取得
  6. ^ https://github.com/npm/cli/blob/4626dfa73b7847e9c42c1f799935f8242794d020/README.md
  7. ^ https://github.com/npm/cli/commit/cbb890eeacc0501ba1b8c6955f1c829c8af9f486
  8. ^ Schlueter、Isaac Z.(2013年3月25日)。"CommonJSを忘れてください。それは死んでいます。**私たちはサーバーサイドJavaScriptです。**"GitHub
  9. ^ Yegulalp、Serdar(2016年3月23日)。「JavaScriptパッケージをヤンクしたものが大混乱を引き起こした方法」InfoWorld 2016年7月22日取得
  10. ^ ウィリアムズ、クリス。「1人の開発者が11行のJavaScriptでNode、Babel、および数千のプロジェクトを壊した方法」レジスター2016年4月17日取得
  11. ^ コリンズ、キース。「あるプログラマーが小さなコードを削除してインターネットを壊した方法」クォーツ2020年12月23日取得
  12. ^ "kik、left-pad、およびnpm" 2017年5月9日取得
  13. ^ 「非公開ポリシーへの変更」npmブログ(アーカイブ)2022年1月23日取得
  14. ^ 「重要なLinuxファイルシステムのパーミッションは最新バージョンによって変更されています」GitHub 2018年2月25日取得
  15. ^ 「eslint-scopeのウイルス?・問題#39・eslint / eslint-scope」GitHub
  16. ^ 「イベントストリームインシデントに関する詳細」npmブログ2018年11月28日取得
  17. ^ 「バックドア依存関係?flatmap-stream-0.1.1およびflatmap-stream-0.1.2」Github 2018年11月28日取得
  18. ^ "ERR_INVALID_PACKAGE_TARGET"Github 2020年8月22日取得
  19. ^ 「DevはNPMライブラリの「色」と「偽物」を破壊し、何千ものアプリを破壊します」BleepingComputer 2022年1月9日取得
  20. ^ Dierx、Peter(2016年3月30日)。「npmの初心者向けガイド–ノードパッケージマネージャー」サイトポイント2016年7月22日取得
  21. ^ Ampersand.js。"Ampersand.js –学ぶ"ampersandjs.com 2016年7月22日取得
  22. ^ a b Ojamaa、Andres; ドゥウナ、カール(2012)。「Node.jsプラットフォームのセキュリティの評価」インターネット技術と安全な取引のための2012年国際会議IEEE。ISBN 978-1-4673-5325-02016年7月22日取得
  23. ^ Nassri、Ahmad(2020年4月14日)。「長い間、すべてのパッケージに感謝します!」npmブログ2021年1月6日取得{{cite web}}:CS1 maint:url-status(link
  24. ^ 「npm行動規範:許容可能なパッケージコンテンツ」2017年5月9日取得
  25. ^ フォルバッハ、ポール。「npm-stat:NPMパッケージのダウンロード統計」npm-stat.com
  26. ^ npm。「」「npm監査」:安全でない依存関係を特定して修正します」。npmブログ2018年8月14日取得
  27. ^ npm。「NodeSecurityPlatformサービスは9/30にシャットダウンしています」npmブログ2018年8月14日取得
  28. ^ エリングウッド、ジャスティン。「Linuxサーバーでnpmを使用してNode.jsパッケージを管理する方法」DigitalOcean 2016年10月22日取得
  29. ^ "npm-install"docs.npmjs 2016年10月22日取得
  30. ^ 「semver」docs.npmjs 2016年10月22日取得
  31. ^ "npm-version"docs.npm 2016年10月29日取得
  32. ^ Koirala、Shivprasad(2017年8月21日)。「Nodeでのpackage-lock.jsonの必要性は何ですか?」codeproject
  33. ^ 「こんにちは、毛糸!」npmブログ2016年10月11日2016年12月17日取得
  34. ^ Katz、Yehuda(2016年10月11日)。「なぜ私は糸に取り組んでいるのですか」2016年12月17日取得
  35. ^ JSConf(2019年6月3日)、CJSilverioによるオープンソースの経済学| JSConf EU 2019 、 2019年6月3日取得
  36. ^ 「レジストリ| npmドキュメント」docs.npmjs.com 2021年5月10日取得

外部リンク