新四季網

vue3 使用bootstrap(網友心得運行jeecgboot-vue3)

2023-10-14 02:41:56

運行jeecgboot-vue3項目可能出現的問題

1. 執行pnpm install的時候報錯

ERR_PNPM_INVALID_OVERRIDE_SELECTOR  Cannot parse the "//" selector in the overrides

翻譯:在overrides裡面無法解析"//"​ 這個問題在issue中能找到, 解決辦法如下:

刪除無法解析的"//",pnpm降級到6.23.6(沒試,不想降級)

這是pnpm在讀package.json中的配置時出現的問題,pnpm.overrides或者resolutions存在"//",選擇刪掉,因為依賴源選擇好了,在國內應該都有鏡像

pnpm.overrides 和 yarn 提供的resolutions 作用類似:指定依賴版本覆蓋所有依賴及子依賴。 (npm可以直接安裝指定版本) resolutions在遇到某些子依賴高版本有bug的時候,固定所有子依賴的版本有用

package.json"resolutions": { "//": "Used to install imagemin dependencies, because imagemin may not be installed in China. If it is abroad, you can delete it", "bin-wrapper": "npm:bin-wrapper-china", "rollup": "^2.56.3", "gifsicle": "5.2.0" },

3.pnpm好處:全局安裝,公用依賴,同名包同版本只會下載一次,提升速度項目中只會展示一級依賴,不會引入你不知道的子級依賴(npm將依賴拍平以減少重複包的下載)4. 關於npm下載依賴esbuild報錯

報錯信息:throw new Error(`esbuild: Failed to install correctly

網上有很多文章解決esbuild安裝問題,就是執行node node_modules/esbuild/install.js安裝後,再跑就可以了。

這裡我提一點,不要無腦複製粘貼,要看你的esbuild的報錯路徑

以下的報錯路徑就是另外一個依賴裡面的報錯

at Object. (/Users/ruios/web/vue-vben-admin-main/node_modules/vite-plugin-mock/node_modules/esbuild/bin/esbuild:2:7)

根據目錄找到文件夾,確實裡面裡面也有一個esbuild 所以執行以下

node node_modules/vite-plugin-mock/node_modules/esbuild/install.js

再次運行就ok了

5. 提示錯報

報錯信息:build.terserOptions is specified but build.minify is not set to use Terser. Note Vite now defaults to use esbuild for minification. If you still prefer Terser, set build.minify to "terser".

在vite.config.js中有打包配置terserOptions為了去掉console,從提示可以看出來,現在Vite默認使用esbuild去作為代碼壓縮器,如果想要使用terserOptions這些配置,要增加minify:terser。 看文檔默認esbuild壓縮有優勢,那也可以刪掉terserOptionsminify: 編譯優化手段,指在不影響代碼語義的情況下,儘可能的減小程序的體積,常見的minify工具如terser、uglify,swc和esbuid也自帶minify功能。發現並不生效,後來查詢是minify配置esbuild的問題,配置成terser混淆器就可以了 , 網上對於minify的默認值有不一致的說法,官網的默認值是esbuild,而經過實際驗證,它的默認值應該是terser相關參數: 1. compress:(默認{})-通過false以完全跳過壓縮。傳遞一個對象以指定自定義壓縮選項。 2. compress.keep_infinity:(默認值:false)-通過true以防止Infinity被壓縮為1/0,這可能會導致Chrome出現性能問題。 3. compress.drop_console:(默認值:false)-傳遞true以放棄對console.*函數的調用 。如果您希望在刪除函數調用後刪除特定的函數調用,例如console.info和/或保留函數自變量的副作用,請pure_funcs改用。

修改前代碼:

vite.config.js build: { target: 'es2015', outDir: OUTPUT_DIR, terserOptions: { compress: { keep_infinity: true, // Used to delete console in production environment drop_console: VITE_DROP_CONSOLE, }, }, // Turning off brotliSize display can slightly reduce packaging time brotliSize: false, chunkSizeWarningLimit: 2000, },

修改後代碼:

build: { minify: 'terser', // 進行壓縮計算 brotliSize: false, target: 'es2015', // 【VUEN-872】css編譯兼容低版本chrome內核(例如360瀏覽器) cssTarget: 'chrome80', outDir: OUTPUT_DIR, terserOptions: { compress: { keep_infinity: true, // Used to delete console in production environment // 打包自動刪除console drop_console: VITE_DROP_CONSOLE, drop_debugger: true, }, }, // Turning off brotliSize display can slightly reduce packaging time chunkSizeWarningLimit: 2000, },

6. vite.config.js中有一個配置optimizeDeps

該配置的目的:

兼容 CommonJS 和 AMD 模塊的依賴(下圖中needsInterop標誌為true就是要重寫CommonJS的導出) 因為 Vite 的 DevServer 是基於瀏覽器的 Natvie ES Module 實現的,所以對於使用的依賴如果是 CommonJS 或 AMD 的模塊,則需要進行模塊類型的轉化(ES Module)減少模塊間依賴引用導致過多的請求次數,加快啟動速度 預編譯後會將dependencies的依賴和optimizeDeps.include中的依賴進行預編譯緩存,並生成存儲的路徑文件node_moduels/.vite/_metadata.json

為了加快二次及後續編譯速度,自己寫optimizeDeps比較麻煩,這裡到npm上看看用起來吧:vite-plugin-optimize-persist 吧

老實講:vite項目頁面稍微多一丟丟東西,開發體驗時首次加載頁面真的慢。不過有了第一次,後面還是舒服

7. vite(esbuild rollup)

關於esbuild的優秀,網上有很多構建優勢對比圖,甩webpack一條街。

Vite 用 esbuild 替代 Rollup 進行預打包,速度也非常快,上面的第三點可以看到生產可以用 esbuild 作為壓縮器。生產打包還是用的Rollup, esbuild 目前對生產包支持不夠健壯,很多配置無法通過 esbuild 實現

8. 運行警告

提示WARN [@vue/compiler-sfc] ::v-deep usage as a combinator has been deprecated. Use :deep instead.

Vue 警告代碼:

::v-deep usage as a combinator has been deprecated. Use :deep instead.

解決方案

使用 :deep 替換 ::v-deep

.carousel { // Vue 2.0 寫法 // ::v-deep .carousel-btn.prev { // left: 270px; // } // Vue 3.0 更改為以下寫法 :deep(.carousel-btn.prev) { left: 270px; }}

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了