kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

AWS codedeployでシンボリックリンクが実ファイルになる件

AWS CodeDeployを使用してdeployをしていますが、nodejsを使用したプロジェクトではまったので記事にします。

node_modulesのbinが動かない

buildはcircleを使用してpackageのインストールが行われた後にそのままファイルをzipにして送るようにしています。

deployをcodedeployに任せてファイル配置をしています。

ファイルの配置が終わったのであとは実行するだけの状態でコマンドを実行したらエラーが発生しました。

****@ npm run lint:js

> kintai_manage@1.0.0 lint:js /Users/****/Downloads/manage-2
> eslint --ext .js,.vue --ignore-path .gitignore .

internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module '../package.json'
Require stack:
- /Users/****/Downloads/manage-2/node_modules/.bin/eslint
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at process.onFatalError (/Users/****/Downloads/manage-2/node_modules/.bin/eslint:106:25)
    at process.emit (events.js:315:20)
    at process._fatalException (internal/process/execution.js:156:25) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/Users/****/Downloads/manage-2/node_modules/.bin/eslint' ]
}

node_modulesにあるファイルの中身がある状態になっており、実行するとpathでエラーがでるため実行できなくなっています。

node_modules/.bin/配下のファイルはシンボリックリンクになって作成されている状態が正しい状態です。

対処

appspec.ymlにdeploy後のスクリプトに「npm rebuild」を追加

一応動いていそうですが、正しいdeployがわからないですね。

結構node_modulesを消してinstallしなおせば治るよ。みたいな記事が多かったので、原因がわかればその通りだと思います。

わかるまで結構時間を使いましたが、ls -laで見たときに納得できてよかったです。