めちゃはまり
事象
dockerつかってvue-cliからbuildしようとしたとき、chalkがnotfoundで落ちる。
下記DockerFileから抜粋
ENV NODE_ENV=production WORKDIR /usr/local/app-octface-front RUN npm install RUN npm run build
RUN npm run build
で下記エラーが出る。
Step 14/18 : RUN npm run build ---> Running in bd96983db14f > oct-face@1.0.0 build /usr/local/app-octface-front > node build/build.js internal/modules/cjs/loader.js:583 throw err; ^ Error: Cannot find module 'chalk' at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15) at Function.Module._load (internal/modules/cjs/loader.js:507:25) at Module.require (internal/modules/cjs/loader.js:637:17) at require (internal/modules/cjs/helpers.js:20:18) at Object.<anonymous> (/usr/local/app-octface-front/build/check-versions.js:2:15) at Module._compile (internal/modules/cjs/loader.js:689:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10) at Module.load (internal/modules/cjs/loader.js:599:32) at tryModuleLoad (internal/modules/cjs/loader.js:538:12) at Function.Module._load (internal/modules/cjs/loader.js:530:3)
package.jsonには chalk があるがインストール後の現物を見るとnode_modules
配下に確かにディレクトリがない。おかしい。
一時解決
原因は、package.jsonにchalkなどがdevDependencies
で 記述されており、npm install
時 NODE_ENV=production
だったのでインストールされなかったようだ。
ENV NODE_ENV=production
を、npm install後になるように書き直した。
RUN npm install ENV NODE_ENV=production RUN npm run build
根本的に、vue-cliによって生成されたbuild.jsがビルドサーバーで動かないつくりになってるのは違和感。 多分開発で使っていたソースをそのままぶっこむのは何か違うんじゃないかな。試すの面倒くさいから誰か見てほしい。