事象
Dockerコンテナ内の環境にて、npm run serve
を実行すると、下記のようなエラーが発生していました。
ERROR Failed to compile with 2 errors
This relative module was not found:
* ./src/main.js in multi (webpack)-dev-server/client/index.js (webpack)/hot/dev-server.js ./src/main.js, multi (webpack)/hot/dev-server.js (webpack)-dev-server/client/index.js ./src/main.js
環境
- Microsoft Windows 10 Pro
- Docker for Windows
- Visual Studio Code
- node.js : 12.18.2
- npm : 6.14.5
原因
筆者の場合、npm install
を実行してもpackage.json
内に含まれているdevDependencies
がインストールされておらず、必要なライブラリ(ここでは@vue/cli-service
)が存在していなかったというのが原因でした。
解決策
node.js側の環境変数であるNODE_ENV
をdevelopment
(あるいはdev
)にしてからnpm install
を実行する必要がありました。
NODE_ENV
を設定する方法は、①.コマンドラインからexport
する方法と、docker-composeを使っている場合は②.docker-compose.xml
に記載する方法があります。
①.export
コマンドで設定する
下記のコマンドでNODE_ENV
に環境値を設定できます。
# NODE_ENVを設定
$ export NODE_ENV=development
# 設定した値を確認する
$ echo $NODE_ENV
development
②.docker-compose.xml
のenvironmentキーに設定する
docker-composeでコンテナを立ち上げている場合、environment
キーを使って設定することができます。
version: '3'
services:
web:
build: .
ports:
- "8080:8080"
environment:
- NODE_ENV=development
tty: true
export
で設定したときと同様に、$NODE_ENV
をechoすると設定値を確認すると、development
が設定されているのが確認できるはずです。
問題の原因を特定するには?
今回の場合、package.json
に記載されているパッケージが正しくインストールできていると早とちりし、「パスが通っていない」か「windowsでシンボリックリンクが使えないのが悪さしている」と思い込んでいたのが、原因の特定が遅れてしまった原因でした。
ちなみに、パッケージが正しくインストールされているかは、npm list --depth=0
で確認することができます。
# インストールされているパッケージの一覧(一階層のみ)を表示
$ npm list --depth=0
project@0.1.0 /app
+-- core-js@3.6.5
`-- vue@2.6.11
# core-js と vue しか入ってないやん!
もし、筆者と同様にnpm run serve
が正しく動作しない場合は、このコマンドで確認してみるといいかもしれません。