package.jsonの記述が問題だったよう。
{
"private": true,
"scripts": {
"dev": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.15.3",
"bootstrap-sass": "^3.3.7",
"cross-env": "^3.2.4",
"jquery": "^3.1.1",
"laravel-mix": "^0.8.3",
"lodash": "^4.17.4",
"vue": "^2.1.10"
}
}
dev、watch、hot、productionのcross-envとなっているところを、
ちゃんとnode_modulesの中のcross-env.jsまでパスに変えてあげる。
これを以下のような形に書き換える
{
"private": true,
"scripts": {
"dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
"production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
},
"devDependencies": {
"axios": "^0.15.3",
"bootstrap-sass": "^3.3.7",
"cross-env": "^3.2.4",
"jquery": "^3.1.1",
"laravel-mix": "^0.8.3",
"lodash": "^4.17.4",
"vue": "^2.1.10"
}
}
Laracastsの以下のページを参考にしました。
https://laracasts.com/discuss/channels/laravel/cross-env-not-found-on-npm-run-dev?page=1
####追記
原因はcross-env
のファイルを見つけられないことだと思うので、cross-env
までのパスを通してあげればOKだけど、cross-env
だけでなく、他のファイルでも同様。
別の機会に同じエラーが出たけど今度はパスを変えてもダメだった。
エラー文をよく見ると、
"dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
の部分でエラーが発生しており、
上記に記載されたファイルをそれぞれvim
で開いてみると、cross-env
以外のファイルがひらけなかった。
実際にフォルダを見てみようとしたがフォルダ自体存在していなかったので、
npm install webpack
などで必要なパッケージをインストールすることで、該当フォルダが作成されて無事npm run watch
が成功した。
ちなみに、npm run watch
が成功しても、その後ファイルを更新したのに自動コンパイルされない、という事態が発生することがある。
その場合は、npm run watch-poll
とすれば自動コンパイルがちゃんと動作する。
(もちろんwebpack.mix.js
にコンパイルするファイルを定義しておく必要はある)
以上。