Laravel 5.4 Mix執(zhí)行 npm run dev時報錯,提示cross-env找不到(not found)的原因及解決辦法

當(dāng)執(zhí)行了npm run dev命令來編譯前端資源時寸士,經(jīng)常會遇到一個報錯檐什,類似這樣:

> Code@1.0.0 dev /home/vagrant/Code
> cross-env NODE_ENV=development webpack --progress --hide-modules

sh: 1: cross-env: not found

npm ERR! Linux 4.4.0-51-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "dev"
npm ERR! node v7.8.0
npm ERR! npm  v4.2.0
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn
npm ERR! Code@1.0.0 dev: `cross-env NODE_ENV=development webpack --progress --hide-modules`
npm ERR! spawn ENOENT

或者說:

npm ERR! Failed at the @ dev script 'cross-env NODE_ENV=development webpack --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js'.

可能你具體的錯誤提示還稍有差異,不過這里先不管它弱卡,重點在于問題是出在cross-env這個組件上乃正。

這個cross-env是個什么鬼?有什么用婶博?

Most Windows command prompts will choke when you set environment variables with NODE_ENV=production like that. (The exception is Bash on Windows, which uses native Bash.) Similarly, there's a difference in how windows and POSIX commands utilize environment variables. With POSIX, you use: $ENV_VAR and on windows you use %ENV_VAR%.

好吧瓮具,又是微軟Windows的鍋~也即是我們在windows系統(tǒng)上使用NODE_ENV=production這樣的方式來設(shè)置node環(huán)境時,因為windows的系統(tǒng)變量是%ENV_VAR%這種格式凡人,而“行業(yè)標(biāo)準(zhǔn)”是$ENV_VAR這樣的名党,當(dāng)然windows上的bash例外。

那么為了解決這個跨平臺環(huán)境變量的問題挠轴,就有了cross-env這個組件传睹。知道這些個有啥用呢?

用處是岸晦,cross-env只是用在windows系統(tǒng)上的欧啤,在Mac和Linux系統(tǒng)上沒用,不需要裝启上,裝了反而會壞事兒~

所以從這一點上邢隧,你的問題其實有兩種可能:

  1. 你的項目環(huán)境是Windows系統(tǒng),你沒有裝cross-env,或者說因為路徑等其他原因調(diào)用不到它冈在。
  2. 你的項目環(huán)境是Linux或Mac倒慧,這個時候你沒必要裝cross-env,但是你卻裝了包券,或者說laravel默認帶了迫靖,而且裝就裝吧,路徑調(diào)用往往還有錯
  3. 這里特別的是兴使,如果你是用的Homestead開發(fā)環(huán)境系宜,因為你虛擬機里是Linux,所以如果你在Host主機上去操作发魄,那你就是Windows環(huán)境盹牧,如果你vagrant ssh進了虛擬機操作,那么就是Linux環(huán)境励幼;

所以解決辦法也要基于你的項目開發(fā)環(huán)境:

一汰寓、 Linux(Homestead)或Mac環(huán)境下:

你要做的,只是將你的package.json文件中的cross-env刪掉即可:

"dev": "node  NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch": "node NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
"watch-poll": "node 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_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_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"

二苹粟、 Windows系統(tǒng)下(WAMP有滑、MAMP)

  1. 首先你需要裝一下cross-env,執(zhí)行:
npm install --save-dev cross-env  --no-bin-links

或者你也可以全局安裝一下cross-env嵌削,以防止以后在其他項目也出現(xiàn)類似錯誤:

npm install -g cross-env  --no-bin-links

  1. package.json文件中的cross-env調(diào)用換成具體路徑node_modules/cross-env/dist/bin/cross-env.js毛好,最終類似這樣:
"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": "node node_modules/cross-env/dist/bin/cross-env.js 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"

  1. 保險起見望艺,再執(zhí)行一下npm install --no-bin-links
  2. 然后再去執(zhí)行npm run dev來試試

為什么會出來這么多梗?甚至很多人因此詬病laravel 5.4不友好——直接下載全新安裝都跑不起來

因為一直到laravel 5.4.15肌访,laravel的package.json是這樣的:

{
  "private": true,
  "scripts": {
    "dev": "node node_modules/cross-env/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/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": "node node_modules/cross-env/bin/cross-env.js 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/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/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",
    "jquery": "^3.1.1",
    "laravel-mix": "^0.8.1",
    "lodash": "^4.17.4",
    "vue": "^2.1.10"
  }
}

可以看到它的devDependencies里沒有依賴cross-env,但是在上方聲明了cross-env的路徑:node_modules/cross-env/bin/cross-env.js找默,因為laravel-mix這個組件里用到了cross-env。但是沒多久吼驶,cross-env的作者對組件路徑做了更改惩激,將cross-env/bin換成了cross-env/dist,于是在這個laravel commit里,package.json文件里更改了cross-env的路徑蟹演,同時"devDependencies"里加上了"cross-env": "^3.2.3"风钻,然后沒幾天,作者們意識到既然依賴了cross-env酒请,就沒必要上面寫具體路徑了骡技,所以在這個laravel commit里,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.3",
    "jquery": "^3.1.1",
    "laravel-mix": "^0.8.1",
    "lodash": "^4.17.4",
    "vue": "^2.1.10"
  }
}

這期間呢蚌父,laravel-mix的作者Jeffway看到laravel里依賴了cross-env哮兰,所以他就在laravel-mix里直接取消了對cross-env的依賴,因為沒必要重復(fù)安裝苟弛,這直接導(dǎo)致了一系列問題的發(fā)生喝滞。而且這期間,laravel里對cross-env的依賴一直停留在"cross-env": "^3.2.3",直到5.4.30膏秫,才突然變成"cross-env": "^5.0.1". 所以呢右遭,取決于你所使用的laravel和laravel-mix的版本,可能是你package.json里沒有cross-env而報錯缤削,也可能是路徑變了以后沒更新窘哈,也可能是laravel調(diào)用的版本一直太低,因為這期間你可能執(zhí)行了composer updatenpm update這些命令而導(dǎo)致兩者的小版本都發(fā)生變化亭敢,所以說不清道不明的問題就發(fā)生了滚婉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帅刀,隨后出現(xiàn)的幾起案子让腹,更是在濱河造成了極大的恐慌,老刑警劉巖扣溺,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骇窍,死亡現(xiàn)場離奇詭異,居然都是意外死亡锥余,警方通過查閱死者的電腦和手機腹纳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘲恍,你說我怎么就攤上這事足画。” “怎么了蛔钙?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵锌云,是天一觀的道長荠医。 經(jīng)常有香客問我吁脱,道長,這世上最難降的妖魔是什么彬向? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任兼贡,我火速辦了婚禮,結(jié)果婚禮上娃胆,老公的妹妹穿的比我還像新娘遍希。我一直安慰自己,他們只是感情好里烦,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布凿蒜。 她就那樣靜靜地躺著,像睡著了一般胁黑。 火紅的嫁衣襯著肌膚如雪废封。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天丧蘸,我揣著相機與錄音漂洋,去河邊找鬼。 笑死力喷,一個胖子當(dāng)著我的面吹牛刽漂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弟孟,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贝咙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拂募?” 一聲冷哼從身側(cè)響起庭猩,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎没讲,沒想到半個月后眯娱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡爬凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年徙缴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡于样,死狀恐怖疏叨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情穿剖,我是刑警寧澤蚤蔓,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站糊余,受9級特大地震影響秀又,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贬芥,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一吐辙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蘸劈,春花似錦昏苏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至棒掠,卻和暖如春孵构,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背句柠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工浦译, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溯职。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓精盅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谜酒。 傳聞我的和親對象是個殘疾皇子叹俏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,603評論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,739評論 0 68
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)僻族,斷路器粘驰,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Node 開發(fā)離不開 npm,而腳本功能是 npm 最強大述么、最常用的功能之一蝌数。 本文介紹如何使用 npm 腳本(n...
    鄧海琪閱讀 5,623評論 0 0
  • 作者 喬恩·克拉森作為一名插畫家,曾從事過動畫片度秘、音像及編輯等工作顶伞。《我要把我的帽子找回來》,是他自寫自...
    微微姐姐閱讀 343評論 0 1