本文來(lái)自pilishen.com----原文鏈接; 歡迎作客我們的php&Laravel學(xué)習(xí)群:109256050《Npm Debug Series》是我們課程laravel實(shí)戰(zhàn)實(shí)戰(zhàn)系列課程的擴(kuò)展閱讀篇,雖然視頻中我們已經(jīng)將npm install過(guò)程中的常見(jiàn)問(wèn)題及解決方案都說(shuō)了,但是鑒于npm的問(wèn)題相對(duì)頻繁,有隨時(shí)查閱之需,故有此系列文章。
最近很多小伙伴在使用最新的laravel5.4來(lái)學(xué)習(xí)我們的laravel實(shí)戰(zhàn)優(yōu)雅入門(mén):任務(wù)管理系統(tǒng)(一),在進(jìn)行到第14節(jié)前端資源的管理與調(diào)用(elixir)時(shí),當(dāng)執(zhí)行了npm run dev命令來(lái)編譯前端資源時(shí),經(jīng)常會(huì)遇到一個(gè)報(bào)錯(cuò),類(lèi)似這樣:
> 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
或者說(shuō):
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".
可能你具體的錯(cuò)誤提示還稍有差異,不過(guò)這里先不管它,重點(diǎn)在于問(wèn)題是出在cross-env這個(gè)組件上。
這個(gè)cross-env是個(gè)什么鬼?有什么用?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的鍋~也即是我們?cè)趙indows系統(tǒng)上使用NODE_ENV=production這樣的方式來(lái)設(shè)置node環(huán)境時(shí),因?yàn)閣indows的系統(tǒng)變量是%ENV_VAR%這種格式,而“行業(yè)標(biāo)準(zhǔn)”是$ENV_VAR這樣的,當(dāng)然windows上的bash例外。
那么為了解決這個(gè)跨平臺(tái)環(huán)境變量的問(wèn)題,就有了cross-env這個(gè)組件。知道這些個(gè)有啥用呢?
用處是,cross-env只是用在windows系統(tǒng)上的,在Mac和Linux系統(tǒng)上沒(méi)用,不需要裝,裝了反而會(huì)壞事兒~
所以從這一點(diǎn)上,你的問(wèn)題其實(shí)有兩種可能:
你的項(xiàng)目環(huán)境是Windows系統(tǒng),你沒(méi)有裝cross-env,或者說(shuō)因?yàn)槁窂降绕渌蛘{(diào)用不到它。
你的項(xiàng)目環(huán)境是Linux或Mac,這個(gè)時(shí)候你沒(méi)必要裝cross-env,但是你卻裝了,或者說(shuō)laravel默認(rèn)帶了,而且裝就裝吧,路徑調(diào)用往往還有錯(cuò)
這里特別的是,如果你是用的Homestead開(kāi)發(fā)環(huán)境,因?yàn)槟闾摂M機(jī)里是Linux,所以如果你在Host主機(jī)上去操作,那你就是Windows環(huán)境,如果你vagrant ssh進(jìn)了虛擬機(jī)操作,那么就是Linux環(huán)境;
所以解決辦法也要基于你的項(xiàng)目開(kāi)發(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)
首先你需要裝一下cross-env,執(zhí)行:
npm install --save-dev cross-env --no-bin-links
或者你也可以全局安裝一下cross-env,以防止以后在其他項(xiàng)目也出現(xiàn)類(lèi)似錯(cuò)誤:
npm install -g cross-env --no-bin-links
將package.json文件中的cross-env調(diào)用換成具體路徑node_modules/cross-env/dist/bin/cross-env.js,最終類(lèi)似這樣:
"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"
保險(xiǎn)起見(jiàn),再執(zhí)行一下npm install --no-bin-links
然后再去執(zhí)行npm run dev來(lái)試試
為什么會(huì)出來(lái)這么多梗?甚至很多人因此詬病laravel 5.4不友好——直接下載全新安裝都跑不起來(lái)因?yàn)橐恢钡絣aravel 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里沒(méi)有依賴(lài)cross-env,但是在上方聲明了cross-env的路徑:node_modules/cross-env/bin/cross-env.js,因?yàn)?b>laravel-mix這個(gè)組件里用到了cross-env。但是沒(méi)多久,cross-env的作者對(duì)組件路徑做了更改,將cross-env/bin換成了cross-env/dist,于是在這個(gè)laravel commit里,package.json文件里更改了cross-env的路徑,同時(shí)"devDependencies"里加上了"cross-env": "^3.2.3",然后沒(méi)幾天,作者們意識(shí)到既然依賴(lài)了cross-env,就沒(méi)必要上面寫(xiě)具體路徑了,所以在這個(gè)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里依賴(lài)了cross-env,所以他就在laravel-mix里直接取消了對(duì)cross-env的依賴(lài),因?yàn)闆](méi)必要重復(fù)安裝,這直接導(dǎo)致了一系列問(wèn)題的發(fā)生。而且這期間,laravel里對(duì)cross-env的依賴(lài)一直停留在"cross-env": "^3.2.3",直到5.4.30,才突然變成"cross-env": "^5.0.1".
所以呢,取決于你所使用的laravel和laravel-mix的版本,可能是你package.json里沒(méi)有cross-env而報(bào)錯(cuò),也可能是路徑變了以后沒(méi)更新,也可能是laravel調(diào)用的版本一直太低,因?yàn)檫@期間你可能執(zhí)行了`composer update`或`npm update`這些命令而導(dǎo)致兩者的小版本都發(fā)生變化,所以說(shuō)不清道不明的問(wèn)題就發(fā)生了。最后,向依然在Windows上裸奔的laravel開(kāi)發(fā)者致以凝重的深望~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/28245.html
摘要:提供服務(wù)端渲染單頁(yè)面渲染實(shí)現(xiàn)骨架同時(shí)集成打包構(gòu)建文件名實(shí)現(xiàn)內(nèi)置等套件提供端渲染方案前后端分離單頁(yè)面方案前后端分離單頁(yè)面方案等三種常見(jiàn)方案項(xiàng)目地址歡迎項(xiàng)目需求基于和提供的強(qiáng)大的功能組合并根據(jù)已有項(xiàng)目實(shí)踐經(jīng)驗(yàn)提供完整的集成方案幫助快速 Laravel-Vue-SSR-SPA 提供服務(wù)端渲染/單頁(yè)面渲染實(shí)現(xiàn)骨架, 同時(shí)集成webpack打包構(gòu)建 MD5文件名/gzip 實(shí)現(xiàn), 內(nèi)置 vue-...
摘要:提供服務(wù)端渲染單頁(yè)面渲染實(shí)現(xiàn)骨架同時(shí)集成打包構(gòu)建文件名實(shí)現(xiàn)內(nèi)置等套件提供端渲染方案前后端分離單頁(yè)面方案前后端分離單頁(yè)面方案等三種常見(jiàn)方案項(xiàng)目地址歡迎項(xiàng)目需求基于和提供的強(qiáng)大的功能組合并根據(jù)已有項(xiàng)目實(shí)踐經(jīng)驗(yàn)提供完整的集成方案幫助快速 Laravel-Vue-SSR-SPA 提供服務(wù)端渲染/單頁(yè)面渲染實(shí)現(xiàn)骨架, 同時(shí)集成webpack打包構(gòu)建 MD5文件名/gzip 實(shí)現(xiàn), 內(nèi)置 vue-...
摘要:概述系統(tǒng)環(huán)境最近在使用時(shí),執(zhí)行命令時(shí)報(bào)了解決方案在百度上搜了一圈,沒(méi)有找到合適的答案。意外在上項(xiàng)目中的找到了對(duì)應(yīng)的解答,方案如下在根目錄增加文件,文件內(nèi)容執(zhí)行命令參考地址 概述 系統(tǒng)環(huán)境 2015 MacBook Pro 13.3 PHP 7.2.2 Laravel 5.7.9 Node v8.0.0 Npm 6.0.0 最近在使用Laravel Mix時(shí),執(zhí)行命令npm run...
摘要:此項(xiàng)目前端使用框架,加上這些常用擴(kuò)展后的其中還加入了加載器解析工具前端動(dòng)畫(huà)等,不需要的可以自行刪除。沒(méi)有的,需要設(shè)置淘寶鏡像,下載的是國(guó)外的鏡像,速度慢而且可能出現(xiàn)下載失敗的問(wèn)題。 本篇只是實(shí)現(xiàn)了 基礎(chǔ) 的功能,對(duì)于實(shí)際的項(xiàng)目中的權(quán)限等還未涉及,這些會(huì)在后期逐步完善。相關(guān)項(xiàng)目 laravel-vue-iview 的 GitHub 地址 戳這里,此項(xiàng)目基本可用于實(shí)際開(kāi)發(fā)工作。 Lara...
摘要:原文地址鏡像地址中文文檔概覽基本示例是位于頂層的一個(gè)簡(jiǎn)潔的配置層,在的情況下使用會(huì)使操作變的非常簡(jiǎn)單。在項(xiàng)目根目錄下并沒(méi)有配置文件,默認(rèn)指向根目錄下的配置文件。否則,它通常與需要?jiǎng)h除的錯(cuò)誤鎖文件有關(guān)。該問(wèn)題已被在修復(fù)。 原文地址: Laravel Mix Docs 鏡像地址 : Laravel-mix 3.0 中文文檔 概覽 基本示例 larave-mix 是位于webpack頂層的一...
閱讀 1097·2021-11-23 09:51
閱讀 2442·2021-10-08 10:22
閱讀 2738·2021-09-29 09:35
閱讀 927·2021-09-22 15:20
閱讀 2915·2019-08-30 15:53
閱讀 2478·2019-08-30 13:55
閱讀 1155·2019-08-29 17:27
閱讀 2943·2019-08-29 17:26