CodeBuildのBuildspecにてvoltaをインストールできるのかのメモです。
確認内容
・Buildspecでnpm install
・volta -v
を実行してvoltaコマンドが認識すること。
・package.json記載通りのnodeバージョンをインストールできること。
・正常にビルドできること。
修正前のBuildspec
version: 0.2
phases:
install:
runtime-versions:
nodejs: 16
pre_build:
commands:
- node -v
- npm -v
- npm install
- volta -v
build:
commands:
- npm run generate
post_build:
commands:
- aws s3 sync ./dist s3://${TARGET_S3_BUCKET}/ --delete
- aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_DISTRIBUTION_ID} --paths "/*"
このままではvolta -v
が認識されず失敗してしまいます。
[Container] 2023/**/** **:**:**.***** Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: volta -v. Reason: exit status 127
package.jsonにvoltaを記載しておいても、npm install
すればvoltaもインストールされるというわけではなく、Buildspecでvoltaをインストールする必要がありそうです。
package.json に記載の内容
"volta": {
"node": "16.20.2"
}
node -v
コマンドでv16.20.2 が排出されたら成功とします。
修正後のBuildspec
version: 0.2
phases:
pre_build:
commands:
- curl https://get.volta.sh | bash
- export PATH=$HOME/.volta/bin:$PATH
- volta -v
- node -v
- npm -v
build:
commands:
- volta install node
- npm install
- node -v
- npm run generate
post_build:
commands:
- aws s3 sync ./dist s3://${TARGET_S3_BUCKET}/ --delete
- aws cloudfront create-invalidation --distribution-id ${CLOUDFRONT_DISTRIBUTION_ID} --paths "/*"
最終Buildspecの内容が上記になります。
これでvoltaインストールでき、build も成功してます。
挙動の流れ
- volta をまずインストール・volta -v
- curl https://get.volta.sh | bash
- export PATH=$HOME/.volta/bin:$PATH
- volta -v
2. node、 npmバージョン確認
- node -v
- npm -v
2. 必要であればnodeバージョンを指定してインストール(例:node@16.20.1等)、
- volta install node
- node -v
3. npm install
- npm install
となります。
特にnode のバージョン指定を設けなければ、
.package.jsonで指定されたnodeのバージョンを設定されインストールされるようです。
ここでは.package.jsonでは16.20.2の指定v16.20.2がインストールされます。
※npm install
より前にvolta のインストールを行うのが推奨
→これによりvolta -v
でバージョン確認可能、その後npm install
の流れです。
参考:
https://zenn.dev/taichifukumoto/articles/how-to-use-volta
そもそも
Buildspecファイル:
AWS CodeBuildでビルドプロジェクトを構成するためのファイルであり、AWS CodeBuildのビルド環境ではカスタムのコマンドやツールを実行することができます。
npm install:
npm install
は通常、Node.jsプロジェクトの依存関係をインストールするために使用されるコマンドです。AWS CodeBuildのビルド環境はNode.jsが事前にインストールされており、npm
コマンドを実行できます。そのため、Buildspecファイルでnpm install
を実行することはできます。
volta:
volta
はNode.jsのバージョンマネージャーで、特定のバージョンのNode.jsを使用するために使用されます。AWS CodeBuildのビルド環境にはNode.jsが含まれており、そのバージョンは指定されています。通常、AWS CodeBuildでvolta
を使用する必要はありません。代わりに、必要なNode.jsバージョンがビルド環境に既にインストールされている場合、それを使用できます。
つまり、通常はnpm install
だけで必要なパッケージをインストールすることができ、volta
を使用する必要はありません。Buildspecファイルでnpm install
を実行することは問題ありませんが、volta -v
の実行は不要かもしれません。ただし、具体的なプロジェクトの要件に応じて調整することができます。