后臺(tái)管理項(xiàng)目報(bào)Error:?spawn?…esbuild.exe?ENOENT的解決過程
前情
最近公司進(jìn)行搬遷,換到了新租的辦公室,老板為了面子,說要統(tǒng)一設(shè)備,全部用一樣型號(hào)的,在網(wǎng)上租了一批辦公設(shè)備,于是我們被迫進(jìn)行了設(shè)備換新,這里吐槽下,新設(shè)備性能確實(shí)好了一些,但是不支持2K雙屏,另一副屏是糊的,看著非常難道,讓人抓狂,
坑位
對(duì)于開發(fā)er來說換設(shè)備是件比較痛苦的事,因?yàn)橐欢验_發(fā)環(huán)境和開發(fā)工具需要重新配置和安裝,這次也不例外,大概經(jīng)過小半天的時(shí)間,終于可以干活了,但是當(dāng)我啟動(dòng)我的后臺(tái)管理項(xiàng)目的時(shí)候報(bào)如下錯(cuò):
> pure-admin-thin@3.9.7 dev D:\Code\dingdong-smart-admin-vue
> NODE_OPTIONS=--max-old-space-size=2048 vite
node:events:496
throw er; // Unhandled 'error' event
^
Error: spawn D:\Code\dingdong-smart-admin-vue\node_modules\.pnpm\esbuild@0.11.3\node_modules\esbuild\esbuild.exe ENOENT
at ChildProcess._handle.onexit (node:internal/child_process:285:19)
at onErrorNT (node:internal/child_process:483:16)
at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
Emitted 'error' event on ChildProcess instance at:
at ChildProcess._handle.onexit (node:internal/child_process:291:12)
at onErrorNT (node:internal/child_process:483:16)
at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {
errno: -4058,
code: 'ENOENT',
syscall: 'spawn D:\\Code\\dingdong-smart-admin-vue\\node_modules\\.pnpm\\esbuild@0.11.3\\node_modules\\esbuild\\esbuild.exe',
path: 'D:\\Code\\dingdong-smart-admin-vue\\node_modules\\.pnpm\\esbuild@0.11.3\\node_modules\\esbuild\\esbuild.exe',
spawnargs: [ '--service=0.11.3', '--ping' ]
}
Node.js v22.17.1
ELIFECYCLE Command failed with exit code 1.
Why?
從錯(cuò)誤信息能看出大概看出好像是生成esbuild.exe報(bào)錯(cuò)了,esbuild 是用 Go 語言編寫的,為了能在不同操作系統(tǒng)(Windows、Linux、macOS 等)上高效運(yùn)行,它會(huì)在安裝時(shí)根據(jù)當(dāng)前系統(tǒng)環(huán)境,下載對(duì)應(yīng)的 預(yù)編譯可執(zhí)行文件(比如 Windows 下的 esbuild.exe),esbuild 是 Vite 等構(gòu)建工具的核心依賴,在項(xiàng)目啟動(dòng)時(shí)需要調(diào)用它的可執(zhí)行文件進(jìn)行代碼編譯 / 打包。如果這個(gè)文件缺失,就會(huì)直接導(dǎo)致啟動(dòng)失敗,至于缺失的原因我也不是特別清楚,如果有大神知道歡迎不吝留言分享
解決方案
方案1:
也是最開始我的的解決方法,我這邊不是缺少esbuild.exe文件,我從同事那里拷來這個(gè)文件放到指定目錄,這樣也算暫時(shí)解決了問題,這也是另一個(gè)同事他摸索出來提供的解決方案
方案2:
新來的同事在初始投入這個(gè)項(xiàng)目的時(shí)候也遇到同樣問題,他給我提供的解決方法是手動(dòng)生成esbuild.exe,在項(xiàng)目根目錄下手動(dòng)運(yùn)行如下命令,親測(cè)也是可行的,同事還把這種方法備注了在項(xiàng)目README.md文擋里,挺不錯(cuò)的,為后來踩坑者提供了爬坑提點(diǎn)
node .\node_modules\esbuild\install.js
后來問了下AI執(zhí)行此命令大概做的事情如下:
node_modules/esbuild/install.js 是 esbuild 包自帶的安裝腳本,它的核心作用就是:
- 檢查當(dāng)前系統(tǒng)環(huán)境,確定需要下載的 esbuild 預(yù)編譯可執(zhí)行文件版本。
- 自動(dòng)下載對(duì)應(yīng)的可執(zhí)行文件,并將其放置到 node_modules/esbuild 目錄下的正確位置(確保 Node.js 后續(xù)能找到并調(diào)用它)。
當(dāng)你手動(dòng)運(yùn)行這個(gè)腳本時(shí),相當(dāng)于強(qiáng)制觸發(fā)了 esbuild 可執(zhí)行文件的 “補(bǔ)裝” 或 “初始化” 流程,把之前缺失的 esbuild.exe(或其他系統(tǒng)對(duì)應(yīng)的可執(zhí)行文件)補(bǔ)充完整,這樣項(xiàng)目再運(yùn)行時(shí),就能正常調(diào)用 esbuild 了
方案3:
我一直在想,難道出現(xiàn)這種情況只能像方案1和2那樣,手動(dòng)拷貝或者生成esbuild.exe 么,雖然解決問題,但是我一直覺得不是理想的,于是我想到是不是安裝過程出現(xiàn)什么警告什么報(bào)錯(cuò)我沒有注意,我于是把項(xiàng)目node_modules刪掉,重新運(yùn)行pnpm install

果然出現(xiàn)如上圖的警告,而上圖警告中就有牽扯到esbuild,再把整個(gè)安裝的日志提供給AI,AI的解釋是:pnpm 出于安全等考慮,默認(rèn)會(huì)攔截一些依賴的構(gòu)建腳本執(zhí)行,需要你通過 pnpm approve-builds 命令來選擇允許哪些依賴運(yùn)行構(gòu)建腳本,但是我按AI說的步驟:

并沒有解決,我此時(shí)想到文件生成失敗有沒有可能跟系統(tǒng)權(quán)限有關(guān),于是我以管理員權(quán)限啟動(dòng)CMD,再執(zhí)行pnpm install,還是有如上警告,我于是再運(yùn)行pnpm approve-builds ,我為了防止又有別的奇怪問題,我全部選了

按回車后再選擇y,看到下如下執(zhí)行日志

此時(shí)我再去跑項(xiàng)目,項(xiàng)目跑成功了
思考
AI真的是不錯(cuò)的生活助手,也是開發(fā)的好幫手,雖然AI提供的方法不是百分百最優(yōu)的也不一定是全對(duì)的,在這次跟AI溝通的時(shí)候,AI有說有可能是node版本太低了,讓我切版到18版本,刪掉pnpm.lock文件重裝安裝,確實(shí)是沒有出現(xiàn)esbuild的問題了,但是因?yàn)閯h掉了pnpm.lock,導(dǎo)致安裝的很多依賴包版本不對(duì),項(xiàng)目出現(xiàn)了很多依賴包的錯(cuò)誤,如果有耐心的話解決依賴包問題,我相信也是能解決問題的,但是因?yàn)槭嵌嗳撕献黜?xiàng)目而且是已經(jīng)在線上運(yùn)行很長一段時(shí)間的項(xiàng)目,不宜大動(dòng)項(xiàng)目依賴,我覺得不是最佳方案,最后還是回退多次嘗試后找到方案3的方式解決的
個(gè)人的能力和知識(shí)都是有限的,遇到問題優(yōu)先和同事溝通,也許他們也踩到同樣坑,他們很有可能有自己的爬坑結(jié)果,你能最快的速度解決問題投入項(xiàng)目開發(fā),但是他們提供的方案并不一定是最優(yōu)的,要自己針對(duì)錯(cuò)誤做一些嘗試,如上方案3就是我覺得同事給的方法應(yīng)該不是最佳的,我個(gè)人嘗試出來的,其實(shí)解決這次問題對(duì)我也有一點(diǎn)提醒,項(xiàng)目安裝完依賴的時(shí)候,如果有警告得多留意,當(dāng)項(xiàng)目跑不起來的時(shí)候,也許這個(gè)警告就是問題根源,當(dāng)然對(duì)于做技術(shù)的我們要相信坑坑難爬,坑坑過,何況現(xiàn)在還有強(qiáng)大的AI了
總結(jié)
到此這篇關(guān)于后臺(tái)管理項(xiàng)目報(bào)Error: spawn …esbuild.exe ENOENT的解決過程的文章就介紹到這了,更多相關(guān)Error: spawn …esbuild.exe ENOENT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node?NPM庫增強(qiáng)版globby?Promise使用學(xué)習(xí)
這篇文章主要為大家介紹了node?NPM庫增強(qiáng)版globby?Promise使用學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
NodeJS之優(yōu)缺點(diǎn)及適用場(chǎng)景討論
這篇文章主要介紹了NodeJS之優(yōu)缺點(diǎn)及適用場(chǎng)景討論,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Node.js中Promise未處理的拒絕報(bào)錯(cuò)的常見原因及解決方案
在Node.js應(yīng)用開發(fā)中,Promise未處理的拒絕(Unhandled Promise Rejection)是一個(gè)常見的錯(cuò)誤,本文系統(tǒng)性總結(jié)Node.js中Promise未處理的拒絕報(bào)錯(cuò)的常見原因及解決方案,并提供豐富的代碼和表格示例分析,需要的朋友可以參考下2025-06-06
Node.js服務(wù)端實(shí)戰(zhàn)之服務(wù)啟動(dòng)過程詳解
這篇文章主要為大家介紹了Node.js服務(wù)端實(shí)戰(zhàn)之服務(wù)啟動(dòng)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
npm安裝yarn后找不到y(tǒng)arn報(bào)錯(cuò)的解決過程
這篇文章主要給大家介紹了關(guān)于npm安裝yarn后找不到y(tǒng)arn報(bào)錯(cuò)的解決過程,文中通過圖文介紹的非常詳細(xì),對(duì)遇到同樣問題的同學(xué)具有一定的參考性,需要的朋友可以參考下2023-04-04

