npm run dev でエラー起きてますか?辛いですね。
「cross-env not found 」とか「mix not found」などと怒られてしまっている場合、以下の内容をチェックしてみてください。
また、npm install 実行時、npm ci 実行時に「symlinkが作れへん」などと言われる場合も以下の内容をチェックしてみてください。
対象
vagrantを利用し、windowsホストマシン、Linuxゲストマシンの環境でLaravelプロジェクトを開発している人
診断
このケースに該当するかチェックするために、プロジェクトのルートディレクトリで以下のコマンドを打ってみましょう。
ls -l node_modules/.bin/
.bin ディレクトリが存在していれば、このケースには該当しません。
mkdir tmp
touch tmp/text1.txt
ln -s tmp/text1.txt textsmlink
ls -l
シンボリックリンクが作成できれば、このケースには該当しません。
前提となる理解
(1)シンボリックリンクが作成できない問題
- npm install 時にsymlink が作成できない
という問題があります。
これは、ホストOS windows 、ゲストOS Linux という環境で開発しているとよく発生します。
「npm symlink error」などで検索すると
のような「--no-bin-links オプションをつけてnpmコマンドを実行する」こういう対処方法が出てきますが、これは罠です。
※symlinkが作成できないという問題を解決するためにsymlinkを作成しないという対処をしているに過ぎないので、問題は解決しない
(2)npm install --no-bin-links を実行すると何が起こるか?
--no-bin-links オプションをつけると、 node_modules/.bin ディレクトリが作成されません。
シンボリックリンクを作成しないためコマンド自体は通るのですが、node_modules/.bin が作成されないため、結果として
npm run dev 実行時に、cross-env not found とか、mix not found などの問題が発生します。
で、「cross-env not found」などで検索すると
「cross_env までのパスを通せ」という感じの対処方法が出てきてしまいます。
確かにこれで一応 npm run dev コマンドは通るのですが、
- 根本原因を解決していない
- 本番環境とローカル環境で package.json に差分が出てしまう
という点でイマイチです。
結論
この問題の根本的な原因は、npmインストール時にシンボリックリンクが張れないことなので、この問題を解決します。
問題解決するための具体的な手段は、利用しているホストOSの種類によって変わってくるので、利用中のOSごとに各自ググりましょう。以下、windows10 の場合の対応手順を示します。
Windows10 Pro の場合
正解はこちらです。
Windows 10の場合、シンボリックリンクを作成する権限はデフォルトではAdministratorグループのみになっています。
「ローカル セキュリティ ポリシー」-「ローカル ポリシー」-「ユーザー権利の割り当て」-「シンボリック リンクの作成」に一般ユーザーのグループ(Users)を追加することで、一般ユーザーでもシンボリックリンクを作成できるようになります。
Windows10 Home の場合
windows10 Home の場合、デフォルト状態では「ローカル セキュリティ ポリシー」が利用できないので、これを利用できるように変更してやる必要があります。
上記参考に「ローカル セキュリティ ポリシー」が利用可能な状態になったら、前述の「Windows10 Pro の場合」の手順を実行します。
備考
composer install 時にも、同様の原因によってインストールが失敗することがあるので、なおさら根本原因を解決しておいたほうがよい。
composer.json に、symlink : true のレポジトリが書いてあったりする場合。