開発者ドキュメント

npmおよびpackage.jsonでNode.jsモジュールを使用する方法

序章

迅速な入出力(I / O)パフォーマンスや、よく知られているJavaScript言語での基盤などの機能により、 Node.js は、バックエンドWeb開発で人気のあるランタイム環境になりました。 しかし、関心が高まるにつれて、より大きなアプリケーションが構築され、コードベースとその依存関係の複雑さを管理することがより困難になります。 Node.jsは、 modules を使用してこの複雑さを整理します。これは、他のプログラムまたはモジュールで使用できる関数またはオブジェクトを含む単一のJavaScriptファイルです。 1つ以上のモジュールのコレクションは一般にパッケージと呼ばれ、これらのパッケージ自体はパッケージマネージャーによって編成されます。

Node.jsパッケージマネージャー(npm)は、Node.jsエコシステムでデフォルトで最も人気のあるパッケージマネージャーであり、主にNode.jsプロジェクトで外部モジュールをインストールおよび管理するために使用されます。 また、さまざまなCLIツールをインストールしてプロジェクトスクリプトを実行するためにもよく使用されます。 npmは、プロジェクトにインストールされたモジュールを追跡します。 package.json ファイル。プロジェクトのディレクトリにあり、次のものが含まれます。

より複雑なNode.jsプロジェクトを作成すると、メタデータと依存関係を package.json すべての外部依存関係が同じに保たれるため、ファイルはより予測可能なビルドを提供します。 ファイルはこの情報を自動的に追跡します。 プロジェクトのメタデータを更新するためにファイルを直接変更することはできますが、モジュールを管理するためにファイルを直接操作する必要はほとんどありません。

このチュートリアルでは、npmを使用してパッケージを管理します。 最初のステップは、作成して理解することです package.json ファイル。 次に、それを使用して、プロジェクトにインストールするすべてのモジュールを追跡します。 最後に、パッケージの依存関係を一覧表示し、パッケージを更新し、パッケージをアンインストールし、監査を実行してパッケージのセキュリティ上の欠陥を見つけます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—作成 package.json ファイル

このチュートリアルは、サンプルプロジェクト(架空のNode.js)を設定することから始めます。 locator ユーザーのIPアドレスを取得し、出身国を返すモジュール。 このチュートリアルでは、モジュールをコーディングしません。 ただし、管理するパッケージは、開発する場合は関連性があります。

まず、作成します package.json プロジェクトに関する有用なメタデータを保存し、プロジェクトに依存するNode.jsモジュールの管理に役立つファイル。 接尾辞が示すように、これはJSON(JavaScript Object Notation)ファイルです。 JSONは、 JavaScriptオブジェクトに基づいており、キーと値のペアとして保存されたデータで構成される、共有に使用される標準形式です。 JSONについて詳しく知りたい場合は、JSONの概要の記事をお読みください。

以来 package.json ファイルには多数のプロパティが含まれているため、他の場所からテンプレートをコピーして貼り付けることなく、手動で作成するのは面倒な場合があります。 物事を簡単にするために、npmは init 指図。 これは、一連の質問をして、 package.json あなたの答えに基づいてファイルします。

を使用して init 指示

まず、モジュールの管理を練習できるようにプロジェクトを設定します。 シェルで、という名前の新しいフォルダを作成します locator:

  1. mkdir locator

次に、新しいフォルダに移動します。

  1. cd locator

次に、次のように入力して、インタラクティブプロンプトを初期化します。

  1. npm init

:コードでバージョン管理にGitを使用する場合は、最初にGitリポジトリを作成してから、 npm init. このコマンドは、Git対応フォルダーにあることを自動的に認識します。 Gitリモコンが設定されている場合は、自動的に入力されます repository, bugs、 と homepage あなたのためのフィールド package.json ファイル。 作成後にリポジトリを初期化した場合 package.json ファイルの場合、この情報を自分で追加する必要があります。 Gitバージョン管理の詳細については、 Gitの概要:インストール、使用法、およびブランチシリーズを参照してください。

次の出力が表示されます。

Output
This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help init` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg>` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. package name: (locator)

最初にプロンプトが表示されます name あなたの新しいプロジェクトの。 デフォルトでは、コマンドはそれがあなたがいるフォルダの名前であると想定します。 各プロパティのデフォルト値は括弧内に示されています (). のデフォルト値以降 name このチュートリアルで動作します、を押します ENTER それを受け入れるために。

次に入力する値は version. 一緒に name、このフィールドは、プロジェクトがnpmパッケージリポジトリ内の他のユーザーと共有される場合に必要です。

注: Node.jsパッケージは、 Semantic Versioning (semver)ガイドに従う必要があります。 したがって、最初の番号は MAJOR APIが変更されたときにのみ変更されるバージョン番号。 2番目の番号は MINOR 機能が追加されると変更されるバージョン。 最後の番号は PATCH バグが修正されたときに変更されるバージョン。

プレス ENTER したがって、デフォルトバージョンの 1.0.0 受け入れられます。

次のフィールドは description—Node.jsモジュールの機能を説明するのに役立つ文字列。 私たちの架空の locator プロジェクトはユーザーのIPアドレスを取得し、出身国を返します。 フィッティング description だろう Finds the country of origin of the incoming request、このようなものを入力してを押します ENTER. The description 人々があなたのモジュールを検索しているときに非常に便利です。

次のプロンプトで、 entry point. 誰かがインストールして requires あなたのモジュール、あなたが設定したもの entry point ロードされるプログラムの最初の部分になります。 値はJavaScriptファイルの相対的な場所である必要があり、に追加されます main のプロパティ package.json. プレス ENTER デフォルト値を維持するには index.js.

:ほとんどのモジュールには index.js エントリのメインポイントとしてファイル。 これは、のデフォルト値です。 package.jsonmain npmモジュールのエントリポイントであるプロパティ。 ない場合 package.json、Node.jsはロードを試みます index.js デフォルトでは。

次に、あなたは test command、プロジェクトテストを実行するための実行可能なスクリプトまたはコマンド。 多くの一般的なNode.jsモジュールでは、テストは Mocha Jest Jasmine 、またはその他のテストフレームワークを使用して記述および実行されます。 テストはこの記事の範囲を超えているため、このオプションは今のところ空のままにして、を押します ENTER 先に進みます。

The init 次に、コマンドはプロジェクトのgitリポジトリを要求します。これはGitHubなどのサービス上に存在する可能性があります(詳細については、 GitHubのリポジトリドキュメントを参照してください)。 この例ではこれを使用しないので、空のままにしておきます。

リポジトリプロンプトの後、コマンドは要求します keywords. このプロパティは、リポジトリを見つけるために人々が使用できる有用な用語を含む文字列の配列です。 検索をよりターゲットにできるように、プロジェクトに本当に関連する単語の小さなセットを用意するのが最善です。 これらのキーワードを、各値をコンマで区切った文字列としてリストします。 このサンプルプロジェクトでは、次のように入力します ip,geo,country プロンプトで。 完成した package.json の配列に3つのアイテムがあります keywords.

プロンプトの次のフィールドは author. これは、あなたと連絡を取りたいモジュールのユーザーに役立ちます。 たとえば、誰かがあなたのモジュールでエクスプロイトを発見した場合、あなたがそれを修正できるように、誰かがこれを使用して問題を報告することができます。 The author fieldは、次の形式の文字列です。 "Name \<Email\> (Website)". 例えば、 "Sammy \<sammy@your_domain\> (https://your_domain)" 有効な作成者です。 電子メールとWebサイトのデータはオプションです。有効な作成者は、名前だけである可能性があります。 著者として連絡先の詳細を追加し、 ENTER.

最後に、 license. これにより、モジュールの使用中にユーザーが持つ法的権限と制限が決まります。 多くのNode.jsモジュールはオープンソースであるため、npmはデフォルトをISCに設定します。

この時点で、ライセンスオプションを確認し、プロジェクトに最適なものを決定します。 さまざまな種類のオープンソースライセンスの詳細については、Open SourceInitiativeのこのライセンスリストを参照してください。 プライベートリポジトリのライセンスを提供したくない場合は、次のように入力できます UNLICENSED プロンプトで。 このサンプルでは、デフォルトのISCライセンスを使用して、 ENTER このプロセスを終了します。

The init コマンドは今、を表示します package.json 作成するファイル。 これは次のようになります。

Output
About to write to /home/sammy/locator/package.json: { "name": "locator", "version": "1.0.0", "description": "Finds the country of origin of the incoming request", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "ip", "geo", "country" ], "author": "Sammy <sammy@your_domain> (https://your_domain)", "license": "ISC" } Is this OK? (yes)

情報がここに表示されているものと一致したら、を押します ENTER このプロセスを完了し、 package.json ファイル。 このファイルを使用すると、プロジェクトにインストールしたモジュールの記録を保持できます。

今、あなたはあなたを持っています package.json ファイルの場合、次のステップでモジュールのインストールをテストできます。

ステップ2—モジュールのインストール

ソフトウェア開発では、外部ライブラリを使用してプロジェクトの補助タスクを実行するのが一般的です。 これにより、開発者はビジネスロジックに集中し、必要なタスクを実行するために他の人が作成したツールやコードを利用して、アプリケーションをより迅速かつ効率的に作成できます。

たとえば、サンプルの場合 locator モジュールは地理データを取得するために外部APIリクエストを作成する必要があります。HTTPライブラリを使用してそのタスクを簡単にすることができます。 私たちの主な目標は関連する地理データをユーザーに返すことなので、このコードを自分で書き直す代わりに、HTTPリクエストを簡単にするパッケージをインストールできます。これはプロジェクトの範囲を超えたタスクです。

この例を実行してみましょう。 あなたの中で locator アプリケーションでは、 axios ライブラリを使用します。これは、HTTPリクエストの作成に役立ちます。 シェルに次のように入力してインストールします。

  1. npm install axios --save

このコマンドは次のコマンドで開始します npm install、パッケージをインストールします(簡潔にするために、使用することもできます) npm i). 次に、インストールするパッケージをスペースで区切って一覧表示します。 この場合、これは axios. 最後に、オプションでコマンドを終了します --save パラメータ、それを指定します axios プロジェクトの依存関係として保存されます。

ライブラリをインストールすると、次のような出力が表示されます。

Output
... + axios@0.27.2 added 5 packages from 8 contributors and audited 5 packages in 0.764s found 0 vulnerabilities

今、開きます package.json 選択したテキストエディタを使用してファイルを作成します。 このチュートリアルでは、 nano:

  1. nano package.json

次のように強調表示されているように、新しいプロパティが表示されます。

locator / package.json
{
  "name": "locator",
  "version": "1.0.0",
  "description": "Finds the country of origin of the incoming request",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "ip",
    "geo",
    "country"
  ],
  "author": "Sammy sammy@your_domain (https://your_domain)",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.27.2"
  }
}

The --save オプションが語った npm を更新するには package.json インストールしたばかりのモジュールとバージョンで。 プロジェクトに取り組んでいる他の開発者は、必要な外部依存関係を簡単に確認できるため、これはすばらしいことです。

:お気づきかもしれませんが ^ のバージョン番号の前 axios 依存。 セマンティックバージョニングは、 MAJOR MINOR 、およびPATCHの3桁で構成されていることを思い出してください。 The ^ 記号は、より高いMINORまたはPATCHバージョンがこのバージョン制約を満たすことを示します。 あなたが見たら ~ バージョン番号の先頭では、より高いPATCHバージョンのみが制約を満たします。

レビューが終了したら package.json、ファイルを閉じます。 nanoを使用してファイルを編集した場合は、を押して編集できます。 CTRL + X その後 ENTER.

開発の依存関係

プロジェクトの開発には使用されるが、本番環境でのビルドや実行には使用されないパッケージは、開発依存関係と呼ばれます。 これらは、モジュールまたはアプリケーションが本番環境で機能するために必要ではありませんが、コードを作成する際に役立つ場合があります。

たとえば、開発者は code linters を使用して、コードがベストプラクティスに従っていることを確認し、スタイルの一貫性を維持するのが一般的です。 これは開発には役立ちますが、本番環境に展開したときに具体的なメリットを提供することなく、配布可能なサイズを増やすだけです。

プロジェクトの開発依存関係としてリンターをインストールします。 シェルでこれを試してください:

  1. npm i eslint@8.0.0 --save-dev

このコマンドでは、 --save-dev 国旗。 これで節約できます eslint 開発にのみ必要な依存関係として。 追加したことにも注意してください @8.0.0 依存関係の名前に。 モジュールが更新されると、バージョンのタグが付けられます。 The @ インストールしているモジュールの特定のタグを探すようにnpmに指示します。 タグを指定しない場合、npmは最新のタグ付きバージョンをインストールします。 開ける package.json また:

  1. nano package.json

これにより、次のように表示されます。

locator / package.json
{
  "name": "locator",
  "version": "1.0.0",
  "description": "Finds the country of origin of the incoming request",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "ip",
    "geo",
    "country"
  ],
  "author": "Sammy sammy@your_domain (https://your_domain)",
  "license": "ISC",
  "dependencies": {
    "axios": "^0.19.0"
  },
  "devDependencies": {
    "eslint": "^8.0.0"
  }
}

eslint として保存されました devDependencies、前に指定したバージョン番号とともに。 出口 package.json.

自動生成されたファイル: node_modulespackage-lock.json

Node.jsプロジェクトにパッケージを最初にインストールするとき、 npm 自動的に作成します node_modules プロジェクトに必要なモジュールと package-lock.json 以前に調べたファイル。

これらが作業ディレクトリにあることを確認してください。 シェルに次のように入力します ls を押して ENTER. 次の出力が表示されます。

Output
node_modules package.json package-lock.json

The node_modules フォルダには、プロジェクトにインストールされているすべての依存関係が含まれています。 ほとんどの場合、このフォルダをバージョン管理されたリポジトリにコミットしない必要があります。 より多くの依存関係をインストールすると、このフォルダーのサイズは急速に大きくなります。 さらに、 package-lock.json ファイルは、インストールされた正確なバージョンの記録をより簡潔な方法で保持するため、 node_modules 必要ありません。

ながら package.json ファイルには、プロジェクトにインストールする必要のある適切なバージョンを示す依存関係がリストされています。 package-lock.json ファイルは、のすべての変更を追跡します package.json また node_modules インストールされているパッケージの正確なバージョンを教えてくれます。 通常、これをバージョン管理されたリポジトリではなく、バージョン管理されたリポジトリにコミットします node_modules、すべての依存関係をより明確に表現しているためです。

package.jsonからインストールする

あなたと package.jsonpackage-lock.json ファイルの場合、新しいプロジェクトで開発を開始する前に、同じプロジェクトの依存関係をすばやく設定できます。 これを示すために、ディレクトリツリーのレベルを上に移動し、という名前の新しいフォルダを作成します cloned_locator と同じディレクトリレベルで locator:

  1. cd ..
  2. mkdir cloned_locator

新しいディレクトリに移動します。

  1. cd cloned_locator

次に、 package.jsonpackage-lock.json からのファイル locatorcloned_locator:

  1. cp ../locator/package.json ../locator/package-lock.json .

このプロジェクトに必要なモジュールをインストールするには、次のように入力します。

  1. npm i

npmは package-lock.json モジュールをインストールするファイル。 使用可能なロックファイルがない場合は、 package.json インストールを決定するためのファイル。 通常、からインストールする方が速いです package-lock.json、ロックファイルにはモジュールの正確なバージョンとその依存関係が含まれているため、npmはインストールに適したバージョンを見つけるために時間を費やす必要がありません。

本番環境にデプロイするときは、開発の依存関係をスキップすることをお勧めします。 開発の依存関係はに保存されていることを思い出してください devDependencies のセクション package.json、アプリの実行には影響しません。 アプリケーションをデプロイするためのデプロイメントプロセスの一部としてモジュールをインストールする場合は、以下を実行して開発の依存関係を省略します。

  1. npm i --production

The --production フラグは無視します devDependencies インストール中のセクション。 今のところ、開発ビルドに固執します。

次のセクションに進む前に、 locator フォルダ:

  1. cd ../locator

グローバルインストール

これまでのところ、npmモジュールをインストールしています locator 事業。 npmでは、パッケージをグローバルにインストールすることもできます。 これは、他のシェルコマンドと同様に、より広いシステムでユーザーがパッケージを利用できることを意味します。 この機能は、CLIツールである多くのNode.jsモジュールに役立ちます。

たとえば、についてブログを書くことができます locator 現在取り組んでいるプロジェクト。 そのためには、 Hexo のようなライブラリを使用して、静的なWebサイトのブログを作成および管理できます。 次のようにHexoCLIをグローバルにインストールします。

  1. npm i hexo-cli -g

パッケージをグローバルにインストールするには、 -g コマンドにフラグを立てます。

:このパッケージをグローバルにインストールしようとしてパーミッションエラーが発生した場合、システムでコマンドを実行するためにスーパーユーザー権限が必要になる場合があります。 で再試行してください sudo npm i hexo-cli -g.

次のように入力して、パッケージが正常にインストールされたことをテストします。

  1. hexo --version

次のような出力が表示されます。

Output
hexo-cli: 4.3.0 os: linux 5.15.0-35-generic Ubuntu 22.04 LTS 22.04 LTS (Jammy Jellyfish) node: 18.3.0 v8: 10.2.154.4-node.8 uv: 1.43.0 zlib: 1.2.11 brotli: 1.0.9 ares: 1.18.1 modules: 108 nghttp2: 1.47.0 napi: 8 llhttp: 6.0.6 openssl: 3.0.3+quic cldr: 41.0 icu: 71.1 tz: 2022a unicode: 14.0 ngtcp2: 0.1.0-DEV nghttp3: 0.1.0-DEV

これまで、npmを使用してモジュールをインストールする方法を学習しました。 パッケージは、本番または開発の依存関係として、ローカルでプロジェクトにインストールできます。 既存のパッケージに基づいてパッケージをインストールすることもできます package.json また package-lock.json ファイル。ピアと同じ依存関係で開発できます。 最後に、あなたは使用することができます -g パッケージをグローバルにインストールするためのフラグを立てて、Node.jsプロジェクトにいるかどうかに関係なくパッケージにアクセスできるようにします。

モジュールをインストールできるようになったので、次のセクションでは、依存関係を管理するためのテクニックを練習します。

ステップ3—モジュールの管理

完全なパッケージマネージャーは、モジュールのインストール以上のことを実行できます。 npmには、依存関係の管理に関連する20を超えるコマンドがあります。 このステップでは、次のことを行います。

これらの例はあなたの中で行われますが locator フォルダの場合、これらのコマンドはすべて、次のコマンドを追加することでグローバルに実行できます。 -g グローバルにインストールするときとまったく同じように、最後にフラグを立てます。

モジュールの一覧表示

プロジェクトにインストールされているモジュールを知りたい場合は、 list また ls コマンドを読み取る代わりに package.json 直接。 これを行うには、次のように入力します。

  1. npm ls

次のような出力が表示されます。

Output
├── axios@0.27.2 └── eslint@8.0.0

The --depth オプションを使用すると、表示する依存関係ツリーのレベルを指定できます。 いつ 0、最上位の依存関係のみが表示されます。 依存関係ツリー全体を表示する場合は、 --all 口論:

  1. npm ls --all

次のような出力が表示されます。

Output
├─┬ axios@0.27.2 │ ├── follow-redirects@1.15.1 │ └─┬ form-data@4.0.0 │ ├── asynckit@0.4.0 │ ├─┬ combined-stream@1.0.8 │ │ └── delayed-stream@1.0.0 │ └─┬ mime-types@2.1.35 │ └── mime-db@1.52.0 └─┬ eslint@8.0.0 ├─┬ @eslint/eslintrc@1.3.0 │ ├── ajv@6.12.6 deduped │ ├── debug@4.3.4 deduped │ ├── espree@9.3.2 deduped │ ├── globals@13.15.0 deduped │ ├── ignore@5.2.0 │ ├── import-fresh@3.3.0 deduped │ ├── js-yaml@4.1.0 deduped │ ├── minimatch@3.1.2 deduped │ └── strip-json-comments@3.1.1 deduped . . .

モジュールの更新

npmモジュールを最新の状態に保つことをお勧めします。 これにより、モジュールの最新のセキュリティ修正を取得する可能性が高まります。 使用 outdated モジュールを更新できるかどうかを確認するコマンド:

  1. npm outdated

次のような出力が得られます。

Output
Package Current Wanted Latest Location Depended by eslint 8.0.0 8.17.0 8.17.0 node_modules/eslint locator

このコマンドは最初に Package それがインストールされ、 Current バージョン。 The Wanted 列には、どのバージョンがバージョン要件を満たしているかが表示されます package.json. The Latest 列には、公開されたモジュールの最新バージョンが表示されます。

The Location 列は、依存関係ツリーのどこにパッケージが配置されているかを示します。 The outdated コマンドには --depth のようなフラグ ls. デフォルトでは、深さは0です。

更新できるようです eslint より新しいバージョンに。 使用 update また up このようなコマンド:

  1. npm up eslint

コマンドの出力には、インストールされているバージョンが含まれます。

Output
removed 7 packages, changed 4 packages, and audited 91 packages in 1s 14 packages are looking for funding run `npm fund` for details found 0 vulnerabilities

のどのバージョンを確認するには eslint あなたが今使っていること、あなたは使うことができます npm ls パッケージ名を引数として使用する:

  1. npm ls eslint

出力は次のようになります npm ls 以前に使用したコマンドですが、 eslint パッケージのバージョン:

Output
└─┬ eslint@8.17.0 └─┬ eslint-utils@3.0.0 └── eslint@8.17.0 deduped

すべてのモジュールを一度に更新する場合は、次のように入力します。

  1. npm up

モジュールのアンインストール

npm uninstall コマンドは、プロジェクトからモジュールを削除できます。 これは、モジュールがにインストールされなくなることを意味します node_modules フォルダー、またはそれはあなたの中に見られません package.jsonpackage-lock.json ファイル。

プロジェクトから依存関係を削除することは、ソフトウェア開発ライフサイクルの通常のアクティビティです。 依存関係は、宣伝されているように問題を解決しない場合や、満足のいく開発エクスペリエンスを提供しない場合があります。 このような場合、依存関係をアンインストールして独自のモジュールを構築する方がよい場合があります。

想像してみろ axios HTTPリクエストを作成するために必要な開発エクスペリエンスを提供しません。 アンインストール axios とともに uninstall また un 次のように入力してコマンドを実行します。

  1. npm un axios

出力は次のようになります。

Output
removed 8 packages, and audited 83 packages in 542ms 13 packages are looking for funding run `npm fund` for details found 0 vulnerabilities

明示的には言わない axios 除去された。 アンインストールされたことを確認するには、依存関係をもう一度リストします。

  1. npm ls

今、私たちはそれを見るだけです eslint インストールされています:

Output
locator@1.0.0 /home/ubuntu/locator └── eslint@8.17.0

これは、正常にアンインストールされたことを示しています axios パッケージ。

監査モジュール

npmは audit 依存関係の潜在的なセキュリティリスクを強調するコマンド。 監査の動作を確認するには、次のコマンドを実行して、古いバージョンのrequestモジュールをインストールします。

  1. npm i request@2.60.0

この古いバージョンをインストールすると request、次のような出力に気付くでしょう。

Output
npm WARN deprecated cryptiles@2.0.5: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial). npm WARN deprecated sntp@1.0.9: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues. npm WARN deprecated boom@2.10.1: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial). npm WARN deprecated node-uuid@1.4.8: Use uuid module instead npm WARN deprecated har-validator@1.8.0: this library is no longer supported npm WARN deprecated hoek@2.16.3: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial). npm WARN deprecated request@2.60.0: request has been deprecated, see https://github.com/request/request/issues/3142 npm WARN deprecated hawk@3.1.3: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues. added 56 packages, and audited 139 packages in 4s 13 packages are looking for funding run `npm fund` for details 9 vulnerabilities (5 moderate, 2 high, 2 critical) To address all issues, run: npm audit fix --force Run `npm audit` for details.

npmは、依存関係に非推奨のパッケージと脆弱性があることを通知しています。 詳細を取得するには、次のコマンドでプロジェクト全体を監査します。

  1. npm audit

The audit コマンドは、セキュリティ上の欠陥を強調する出力の表を表示します。

Output
# npm audit report bl <1.2.3 Severity: moderate Remote Memory Exposure in bl - https://github.com/advisories/GHSA-pp7h-53gx-mx7r fix available via `npm audit fix` node_modules/bl request 2.16.0 - 2.86.0 Depends on vulnerable versions of bl Depends on vulnerable versions of hawk Depends on vulnerable versions of qs Depends on vulnerable versions of tunnel-agent node_modules/request cryptiles <=4.1.1 Severity: critical Insufficient Entropy in cryptiles - https://github.com/advisories/GHSA-rq8g-5pc5-wrhr Depends on vulnerable versions of boom fix available via `npm audit fix` node_modules/cryptiles hawk <=9.0.0 Depends on vulnerable versions of boom Depends on vulnerable versions of cryptiles Depends on vulnerable versions of hoek Depends on vulnerable versions of sntp node_modules/hawk . . . 9 vulnerabilities (5 moderate, 2 high, 2 critical) To address all issues, run: npm audit fix

あなたは脆弱性の経路を見ることができます、そして時々npmはあなたがそれを修正するための方法を提供します。 提案されたようにupdateコマンドを実行するか、 fix のサブコマンド audit. シェルに次のように入力します。

  1. npm audit fix

次のような出力が表示されます。

Output
npm WARN deprecated har-validator@5.1.5: this library is no longer supported npm WARN deprecated uuid@3.4.0: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 added 19 packages, removed 34 packages, changed 13 packages, and audited 124 packages in 3s 14 packages are looking for funding run `npm fund` for details found 0 vulnerabilities

npmは、2つのパッケージを安全に更新し、脆弱性を同じ量だけ減らすことができました。 ただし、依存関係にはまだ3つの非推奨パッケージがあります。 The audit fix コマンドですべての問題が解決するとは限りません。 モジュールのバージョンにはセキュリティの脆弱性がある可能性がありますが、別のAPIを使用するバージョンに更新すると、依存関係ツリーの上位にあるコードが破損する可能性があります。

あなたは使用することができます --force 次のように、脆弱性がなくなったことを確認するパラメータ:

  1. npm audit fix --force

前述のように、機能が損なわれないことが確実でない限り、これはお勧めしません。

結論

このチュートリアルでは、Node.jsモジュールがパッケージに編成される方法と、これらのパッケージがnpmによって管理される方法を示すために、さまざまな演習を行いました。 Node.jsプロジェクトでは、npmパッケージを依存関係として使用し、 package.json ファイル-インストールしたモジュールを含む、プロジェクトのメタデータの記録。 また、npm CLIツールを使用して、プロジェクトの依存関係ツリーを一覧表示し、古いモジュールをチェックおよび更新することに加えて、モジュールをインストール、更新、および削除しました。

将来的には、モジュールを使用して既存のコードを活用すると、機能を繰り返す必要がなくなるため、開発時間が短縮されます。 また、独自のnpmモジュールを作成することもでき、これらはnpmコマンドを介して他のユーザーによって管理されます。 次のステップとして、さまざまなパッケージをインストールしてテストすることにより、このチュートリアルで学んだことを試してください。 問題解決を容易にするためにエコシステムが提供するものをご覧ください。 たとえば、JavaScriptのスーパーセットである TypeScript を試したり、Cordovaを使用してWebサイトをモバイルアプリに変えたりすることができます。 Node.jsの詳細については、その他のNode.jsチュートリアルをご覧ください。

モバイルバージョンを終了