BuildSpecでvoltaのインストールをする

aws

CodeBuildのBuildspecにてvoltaをインストールできるのかのメモです。

確認内容

・Buildspecでnpm installvolta -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 も成功してます。

挙動の流れ

  1. 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の実行は不要かもしれません。ただし、具体的なプロジェクトの要件に応じて調整することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次