背景:
我創建了兩個存盤庫:存盤庫 A(包含一個 Angular 應用程式)和存盤庫 B(包含一個 Angular 庫)。這兩個存盤庫都是在本地機器上克隆和開發的。存盤庫 B 中的庫通過 安裝在存盤庫 A 中npm link。存盤庫 A 中的應用程式使用存盤庫 B 中的庫(例如 Angular 服務)。
這兩個存盤庫都是使用 Nx 版本 13.3.9 創建的。為了更好地理解,我簡化了這個描述的復雜性。實際上,這兩個專案都是具有更多應用程式和庫的大型單一存盤庫。
問題
我提供存盤庫 A 的應用程式并使用 Chrome 打開它。每當我對存盤庫 BI 的庫進行更改時,都會構建該庫,并且來自存盤庫 A 的 ng-development-server 會識別更改并重新編譯應用程式。我檢查了對存盤庫 B 中的庫所做的更改是否與node_modules存盤庫 A 檔案夾中的已安裝庫相同。這意味著存盤庫 A 中的已安裝庫和存盤庫 B 的構建正確同步。但是,當我使用 Chrome 打開應用程式并使用 webdev-tools 對其進行除錯時,我會看到該庫的舊版本而沒有進行新的更改。
建議
我認為這是某種快取問題,但我不知道如何解決。我不知道為什么會發生這種情況,也不知道這個問題的根源。
我現在嘗試過的
- 我已經完全清除了 Chrome 瀏覽器的快取并重新啟動了很多次
- 我嘗試了其他網路瀏覽器,如 Firefox
- 我嘗試將 Nx 升級到最新版本
- 我洗掉了 node_modules 檔案夾并再次安裝了所有依賴項
- 我從 node_modules/.cache 中洗掉了快取
嘗試重現此問題
我嘗試使用 Nx 13.3.9 通過兩個測驗存盤庫重現此問題,但沒有成功。新的存盤庫不知何故沒有這個問題。我想分享這個問題的一個最小例子,但我不能。
問題
我該如何解決這個問題,為什么會發生這種情況?我知道沒有任何代碼很難提供幫助,但是兩個“真正的”存盤庫很大并且安裝并不容易。不幸的是我不能分享代碼。
uj5u.com熱心網友回復:
我在評論部分的假設是正確的:問題是由preserveSymlinks我的angular.json檔案中的選項引起的。我不知道為什么,但是這個選項導致 webpack 在某些內容發生變化后無法正確更新符號鏈接。
將preserveSymlinks選項從 true更改為 false 后,出現錯誤:
inject() must be called from an injection context
解決此錯誤的一種解決方案是preserveSymlinks再次添加該選項。但是我不想再次添加它并應用了另一個解決方案:我將以下代碼添加到paths屬性中tsconfig.base.json:
"paths": {
"@angular/*": [
"./node_modules/@angular/*"
],
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/392985.html
