我的后臺管理項目報Error: spawn …esbuild.exe ENOENT了
前情
最近公司進行搬遷,換到了新租的辦公室,老板為了面子,說要統一設備,全部用一樣型號的,在網上租了一批辦公設備,于是我們被迫進行了設備換新,這里吐槽下,新設備性能確實好了一些,但是不支持2K雙屏,另一副屏是糊的,看著非常難道,讓人抓狂,
坑位
對于開發er來說換設備是件比較痛苦的事,因為一堆開發環境和開發工具需要重新配置和安裝,這次也不例外,大概經過小半天的時間,終于可以干活了,但是當我啟動我的后臺管理項目的時候報如下錯:
> 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?
從錯誤信息能看出大概看出好像是生成esbuild.exe報錯了,esbuild 是用 Go 語言編寫的,為了能在不同操作系統(Windows、Linux、macOS 等)上高效運行,它會在安裝時根據當前系統環境,下載對應的 預編譯可執行文件(比如 Windows 下的 esbuild.exe),esbuild 是 Vite 等構建工具的核心依賴,在項目啟動時需要調用它的可執行文件進行代碼編譯 / 打包。如果這個文件缺失,就會直接導致啟動失敗,至于缺失的原因我也不是特別清楚,如果有大神知道歡迎不吝留言分享
解決方案
方案1:
也是最開始我的的解決方法,我這邊不是缺少esbuild.exe文件,我從同事那里拷來這個文件放到指定目錄,這樣也算暫時解決了問題,這也是另一個同事他摸索出來提供的解決方案
方案2:
新來的同事在初始投入這個項目的時候也遇到同樣問題,他給我提供的解決方法是手動生成esbuild.exe,在項目根目錄下手動運行如下命令,親測也是可行的,同事還把這種方法備注了在項目README.md文擋里,挺不錯的,為后來踩坑者提供了爬坑提點
node .\node_modules\esbuild\install.js
后來問了下AI執行此命令大概做的事情如下:
node_modules/esbuild/install.js 是 esbuild 包自帶的安裝腳本,它的核心作用就是:
- 檢查當前系統環境,確定需要下載的 esbuild 預編譯可執行文件版本。
- 自動下載對應的可執行文件,并將其放置到 node_modules/esbuild 目錄下的正確位置(確保 Node.js 后續能找到并調用它)。
當你手動運行這個腳本時,相當于強制觸發了 esbuild 可執行文件的 “補裝” 或 “初始化” 流程,把之前缺失的 esbuild.exe(或其他系統對應的可執行文件)補充完整,這樣項目再運行時,就能正常調用 esbuild 了
方案3:
我一直在想,難道出現這種情況只能像方案1和2那樣,手動拷貝或者生成esbuild.exe 么,雖然解決問題,但是我一直覺得不是理想的,于是我想到是不是安裝過程出現什么警告什么報錯我沒有注意,我于是把項目node_modules刪掉,重新運行pnpm install

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

并沒有解決,我此時想到文件生成失敗有沒有可能跟系統權限有關,于是我以管理員權限啟動CMD,再執行pnpm install,還是有如上警告,我于是再運行pnpm approve-builds ,我為了防止又有別的奇怪問題,我全部選了

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

此時我再去跑項目,項目跑成功了
思考
AI真的是不錯的生活助手,也是開發的好幫手,雖然AI提供的方法不是百分百最優的也不一定是全對的,在這次跟AI溝通的時候,AI有說有可能是node版本太低了,讓我切版到18版本,刪掉pnpm.lock文件重裝安裝,確實是沒有出現esbuild的問題了,但是因為刪掉了pnpm.lock,導致安裝的很多依賴包版本不對,項目出現了很多依賴包的錯誤,如果有耐心的話解決依賴包問題,我相信也是能解決問題的,但是因為是多人合作項目而且是已經在線上運行很長一段時間的項目,不宜大動項目依賴,我覺得不是最佳方案,最后還是回退多次嘗試后找到方案3的方式解決的
個人的能力和知識都是有限的,遇到問題優先和同事溝通,也許他們也踩到同樣坑,他們很有可能有自己的爬坑結果,你能最快的速度解決問題投入項目開發,但是他們提供的方案并不一定是最優的,要自己針對錯誤做一些嘗試,如上方案3就是我覺得同事給的方法應該不是最佳的,我個人嘗試出來的,其實解決這次問題對我也有一點提醒,項目安裝完依賴的時候,如果有警告得多留意,當項目跑不起來的時候,也許這個警告就是問題根源,當然對于做技術的我們要相信坑坑難爬,坑坑過,何況現在還有強大的AI了
同時附上我和AI針對此問題的溝通過程:https://www.doubao.com/thread/w50933e1fe6479913

浙公網安備 33010602011771號