故障排除?
你還可以查看 Rollup 的故障排除指南 了解更多今布。
如果這里的建議并未幫助到你帘靡,請將你的問題發(fā)送到 GitHub 討論區(qū) 或 Vite Land Discord 的 #help
頻道拒秘。
CLI?
Error: Cannot find module 'C:\foo\bar&baz\vite\bin\vite.js'
?
你的項目文件夾路徑中可能包含了符號 &
渺杉,這在 Windows 上無法與 npm
配合正常工作 (npm/cmd-shim#45)双霍。
你可以選擇以下兩種修改方式:
- 切換另一種包管理工具(例如
pnpm
或yarn
) - 從你的項目路徑中移除符號
&
開發(fā)服務器?
請求始終停滯?
如果你使用的是 Linux砚偶,文件描述符限制和 inotify 限制可能會導致這個問題批销。由于 Vite 不會打包大多數文件,瀏覽器可能會請求許多文件染坯,而相應地需要許多文件描述符均芽,因此超過了限制。
要解決這個問題:
-
使用
ulimit
增加文件描述符的限制shell
# 查看當前限制值 $ ulimit -Sn # (暫時)更改限制值 $ ulimit -Sn 10000 # 你可能也需要更改硬性限制值 # 重啟你的瀏覽器
-
通過
sysctl
提升下列 inotify 相關的限制shell
# 查看當前限制值 $ sysctl fs.inotify # (暫時)更改限制值 $ sudo sysctl fs.inotify.max_queued_events=16384 $ sudo sysctl fs.inotify.max_user_instances=8192 $ sudo sysctl fs.inotify.max_user_watches=524288
如果通過以上步驟仍不起作用单鹿,可以嘗試在以下文件中添加 DefaultLimitNOFILE=65536
配置掀宋。
- /etc/systemd/system.conf
- /etc/systemd/user.conf
對于 Ubuntu Linux 操作系統(tǒng),你可能需要添加一行 * - nofile 65536
到文件 /etc/security/limits.conf
之中仲锄,而不是更新 systemd 配置文件劲妙。
請注意,這些配置會持久作用儒喊,但需要 重新啟動镣奋。
網絡請求停止加載?
使用自簽名SSL證書時,Chrome 會忽略所有緩存指令并重新加載內容怀愧。而 Vite 依賴于這些緩存指令侨颈。
要解決此問題,請使用受信任的SSL證書芯义。
請查看:緩存問題 和相關的 Chrome issue
macOS?
您可以使用以下命令通過 CLI 安裝受信任的證書:
security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain-db your-cert.cer
或者哈垢,通過將其導入 Keychain Access 應用程序并將您的證書的信任更新為“始終信任”冬三。
431 Request Header Fields Too Large?
當服務器或 WebSocket 服務收到一個較大的 HTTP 頭凹耙,該請求可能會被遺落并且會顯示下面這樣的警告灾前。
Server responded with status code 431. See https://vitejs.dev/guide/troubleshooting.html#_431-request-header-fields-too-large.
這是由于 Node.js 限制請求頭大小定拟,以減輕 CVE-2018-12121 的影響僚稿。
要避免這個問題旬迹,請嘗試減小請求頭大小悦荒。舉個例子茫打,如果 cookie 太長待秃,請刪除它拜秧。或者你可以使用 --max-http-header-size
來更改最大請求頭大小章郁。
HMR?
Vite 檢測到文件變化枉氮,但 HMR 不工作?
你可能導入了一個擁有不同大小寫的文件,例如暖庄,存在 src/foo.js
文件而 src/bar.js
導入了它:
js
import './Foo.js' // 應該為 './foo.js'
相關 issue:#964
Vite 沒有檢測到文件變化?
如果你正在 WSL2 中運行 Vite聊替,Vite 無法在某些場景下監(jiān)聽文件變化。請查看 server.watch
選項 的描述培廓。
完全重新加載了惹悄,而不是 HMR?
如果 HMR 不是由 Vite 或一個插件處理的,那么將進行完全的重新加載肩钠。
同時如果有依賴環(huán)泣港,也會發(fā)生完全重載暂殖。要解決這個問題,請先嘗試解決依賴循環(huán)当纱。
控制臺中大量熱更新?
這可能是由循環(huán)依賴引起的呛每。要解決這個問題,請先嘗試解決依賴循環(huán)坡氯。
構建?
構建產物因為 CORS 錯誤無法工作?
如果導出的 HTML 文件是通過 file
協(xié)議打開的晨横,那么其中的 script 將不會運行,且報告下列錯誤箫柳。
Access to script at 'file:///foo/bar.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at file:///foo/bar.js. (Reason: CORS request not http).
請查看 釋因:CORS 請求不是 HTTP 請求 - HTTP | MDN 了解為什么會發(fā)生這種情況的更多信息手形。
你需要通過 http
協(xié)議訪問該文件。最簡單的辦法就是使用 npx vite preview
滞时。
其他?
Module externalized for browser compatibility?
當你在瀏覽器中使用一個 Node.js 模塊時叁幢,Vite 會輸出以下警告:
Module "fs" has been externalized for browser compatibility. Cannot access "fs.readFile" in client code.
這是因為 Vite 不會自動 polyfill Node.js 的內建模塊。
我們推薦你不要在瀏覽器中使用 Node.js 模塊以減小包體積坪稽,盡管你可以為其手動添加 polyfill曼玩。如果該模塊是被某個第三方庫(這里意為某個在瀏覽器中使用的庫)導入的酌儒,則建議向對應庫提交一個 issue事示。
出現 Syntax Error 或 Type Error?
Vite 無法處理、也不支持僅可在非嚴格模式(sloppy mode)下運行的代碼鳖宾。這是因為 Vite 使用了 ESM 并且始終在 ESM 中使用 嚴格模式篙梢。
例如顷帖,你可能會看到以下錯誤。
[ERROR] With statements cannot be used with the "esm" output format due to strict mode
TypeError: Cannot create property 'foo' on boolean 'false'
如果這些代碼是在依賴中被使用的渤滞,你應該使用 patch-package
(或者 yarn patch
贬墩、pnpm patch
工具)來做短期補丁處理。