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で見たときに納得できてよかったです。