説明
npm install sax のようにバージョンを指定しないと、レジストリの変更によって別のバージョンがインストールされる場合があります。同じ Dockerfile の再ビルドでも結果が変わる可能性があります。
Node.js の依存関係は、小さな更新でも動作が変わる場合があります。デプロイ用イメージではバージョンを明示し、予期しない更新を管理してください。
想定される影響
- ビルド時期によって異なる npm パッケージがインストールされる場合があります。
- 予期しない更新でアプリケーションエラーが発生する可能性があります。
- テストと本番で依存関係の構成が異なる場合があります。
対処方法
npm install sax@0.1.1のようにパッケージのバージョンを指定してください。- グローバルインストールでもバージョンを固定してください。
- プロジェクトの依存関係は確認済みのロックファイルと
npm ciでインストールし、直接依存だけでなく間接依存の変更も管理してください。
例
ANGULAR_CLI_VERSION には Node.js 環境と互換性がある確認済みの正確なバージョンを指定してください。タグやバージョン範囲は厳密な固定ではありません。sax@0.1.1 は過去の構文例で、本番向けの推奨値ではありません。Git 依存関係も #semver:^5.0 などの範囲ではなく、確認済みのコミットに固定してください。
変更前
dockerfile
FROM node:22
RUN npm install sax
RUN npm i -g @angular/cli
変更後
dockerfile
FROM node:22
ARG ANGULAR_CLI_VERSION
RUN npm install sax@0.1.1
RUN test -n "$ANGULAR_CLI_VERSION" && npm i -g "@angular/cli@${ANGULAR_CLI_VERSION}"
説明:
- 変更前: バージョンが指定されず、ビルド結果が変わる可能性があります。
- 変更後: バージョンを明示して対象の依存関係の変更を管理します。