このドキュメントでは Paketo Node.js Buildpack の振る舞いや設定項目について詳しく説明します。 一般的な使用例については Node.js のチュートリアル を参照してください。
Node.js Buildpack は Node.js ランタイムの複数のバージョンに対応しています。 具体的なバージョンは Buildpack のリリースノート で確認してください。
Node.js Buildpack はアプリケーションライフサイクルのビルドフェーズや起動フェーズでいくつかの環境変数を設定します。 このセクションではアプリケーションに影響するであろう環境変数について説明します。
環境変数 MEMORY_AVAILABLE
にはアプリケーションから利用できるメモリサイズの合計値を設定します。
Node.js Buildpack は OS の /sys/fs/cgroup/memory/memory.limit_in_bytes
を参照して値を計算します。
profile.d
launch
環境変数 NODE_ENV
にはアプリケーションを実行するときの環境種類を設定します。
node-engine
buildpackbuild
環境変数 NODE_HOME
には Node.js をインストールしたディレクトリのパスを設定します。
node-engine
buildpackbuild
node
installation環境変数 NODE_VERBOSE
には NPM が依存ぱっけー所をインストールするときに出力するログを調整する値を設定します。
node-engine
buildpackbuild
環境変数 NPM_CONFIG_LOGLEVEL
には NPM のログ出力レベルを調整する値を設定します。
npm-install
buildpackbuild
環境変数 NPM_CONFIG_PRODUCTION
には NPM が production の依存ライブラリだけをインストールするかどうかを制御する値を設定します。
npm-install
buildpackbuild
環境変数 PATH
には node_modules/.bin
を追加します。
yarn-install
or npm-install
buildpacksbuild
node_modules/.bin
directory多くの Node.js アプリケーションで、一般的なタスクや振る舞いを実現するためにサードパーティのライブラリを使用しています。
NPM は、Node.js Buildpack が完全に対応している、サードパーティのライブラリを管理する方法の1つです。
Buildpack は、アプリケーションのソースコードに package.json
があれば、NPM によるサードパーティライブラリのインストールを試みます。
このセクションでは Buildpack が NPM によるインストールをどのように実行するのか説明します。
NPM には依存パッケージをインストールするためのさまざまな方法が用意されています。
Node.js Buildpack は npm install
や npm rebuild
や npm ci
を実行します。
実行するコマンドは、ソースコードに含まれる特定のファイルやディレクトリから判断します。
また、実行するコマンドに基づいて、アプリケーションレイヤーを再利用するか、それとも再作成するかを判断します。
次の表は Node.js Buildpack が NPM で依存パッケージをインストールする方法を判断する条件です。 アプリケーションのソースコードに存在するファイルやディレクトリに応じて、必要な依存パッケージを正確に再現できるインストール方法を判断します。
package-lock.json |
node_modules |
npm-cache |
Command |
---|---|---|---|
X | X | X | npm install |
X | X | ✓ | npm install |
X | ✓ | X | npm rebuild |
X | ✓ | ✓ | npm rebuild |
✓ | X | X | npm ci |
✓ | X | ✓ | npm ci |
✓ | ✓ | X | npm rebuild |
✓ | ✓ | ✓ | npm ci |
このセクションの残りでは、前の表に並んでいるファイルについて説明し、意図したとおりの結果にする方法を説明します。
package-lock.json
は npm install
コマンドを実行すると生成されるファイルです。
詳しくは Node のドキュメント を参照してください。
node_modules
ディレクトリには、 npm install
でインストールした全てのパッケージの複製が存在します。
詳しくは Node Mudules で rpm-folders のセクションを参照してください。
npm-cache
ディレクトリには、パッケージに関する全ての情報を、コンテンツをアドレス指定できるデータとして格納します。
加えて、キャッシュが利用できる場合、アプリケーションをビルドするために必要な全ての依存パッケージをオフライン環境で利用できることになります。
npm-cache
ディレクトリへデータを追加するには次のように実行します。
cd <your source code directory> npm ci --cache npm-cache
Copied!
NPM キャッシュについて詳しくは NPM キャッシュのドキュメント を参照してください。
アプリケーションのビルド時間を短縮するため、Node.js Buildpack には先に実行したビルドの結果を再利用する方法があります。 依存パッケージのインストール方法に応じて、Buildpack が先に実行したビルドの結果を再利用できるか判断する方法は異なります。
npm install
の場合、先に実行したビルドで作成した node_modules
ディレクトリは再利用できません。
npm rebuild
の場合、アプリケーションのソースコードに含まれる node_modules
ディレクトリが、先に実行したビルドで変更されていなければ再利用できます。
npm ci
の場合、アプリケーションのソースコードに含まれる package-lock.json
が、先に実行したビルドで変更されていなければ、node_modules
ディレクトリを再利用できます。
多くの Node.js アプリケーションで、一般的なタスクや振る舞いを実現するためにサードパーティのライブラリを使用しています。
Yarn は、Node.js Buildpack が対応している、サードパーティのライブラリを管理する方法の1つです。
Buildpack は、アプリケーションのソースコードに package.json
と yarn.lock
があれば、Yarn によるサードパーティライブラリのインストールを試みます。
このセクションでは Buildpack が Yarn によるインストールをどのように実行するのか説明します。
Node.js Buildpack は yarn install
あるいは yarn.check
でサードパーティの依存パッケージがインストールできていることを保証します。
yarn.lock
ファイルには Yarn の管理する依存パッケージに関する完全な情報が格納されています。
詳しくは Yarn のドキュメント を参照してください。
Node.js Buildpack はビルド処理の一部としてコンテナイメージの起動コマンドを生成します。
起動コマンドはアプリケーションのパッケージ管理の方法により異なります。
Node.js Buildpack が yarn
を使用するときは、起動コマンドに yarn start
を設定します。
Node.js Buildpack はビルド処理の一部としてコンテナイメージの起動コマンドを生成します。
起動コマンドはアプリケーションのパッケージ管理の方法により異なります。
Node.js Buildpack が npm
か yarn
を使用するときは、package.json
の内容から生成した起動コマンドを設定します。
Node.js Buildpack はサードパーティパッケージを使わない、単純なアプリケーションにも対応しています。
Node.js Buildpack はパッケージ管理ツールを使っていないアプリケーションについて、一般的なエントリポイントとなるファイルを探索します。
server.js
app.js
main.js
index.js
Buildpack はこれらのファイルを発見すると、起動コマンドに node <entrypoint filename>
を設定します。
Node.js Buildpack は BOM に完全対応しています。 Node.js アプリケーションの BOM には次のような内容が含まれます。
node engine
- Node.js のランタイムに関する情報ですnode module
- node_modules
に展開した依存パッケージに関する情報ですnode module
要素は最終的なコンテナイメージに含まれる依存パッケージの全体像を提供します。
purl
フィールドを見れば、どの NPM レジストリから取得できるのか分かります。
詳しくは 部品表(Bill of Materials)へアクセスする を参照してください。
Last modified: September 15, 2021