# Vite build效能優化
###### tags: `Vite`
前端構建打包工具,運行build時,會默認把項目中所有用到的第三方資源打包成一個 js 文件中 vendor.js,如果不加以拆分,這個文件將會很大導致首屏加載速度變慢,我們可以透過用 cdn加載的方式,優化打包後的大小和加載速度。
## 配置cdn方法
### [vite-plugin-cdn-import](https://github.com/mmf-fe/vite-plugin-cdn-import)
:::info
npm install vite-plugin-cdn-import --save-dev
:::
``` javascript=
// vite.config.js
import importToCDN from 'vite-plugin-cdn-import'
export default defineConfig({
plugins: [
importToCDN({
modules: [
{
name: 'vue',
var: 'Vue',
path: 'https://unpkg.com/vue@3/dist/vue.global.js'
},
{
name: 'vue-router',
var: 'VueRouter',
path: 'https://unpkg.com/vue-router@4.0.16/dist/vue-router.global.prod.js'
},
{
name: 'axios',
var: 'axios',
mode: 'load',
path: 'https://cdn.jsdelivr.net/npm/axios@1.2.1/dist/axios.min.js',
}
],
}),
reactRefresh(),
],
})
```
``` javascript=
// main.js
import { createApp } from 'vue'
import axios from 'axios'
import router from 'router'
import App from './App.vue'
createApp(App).use(axios).use(router).mount('#app')
```
### rollup-plugin-external-globals
:::info
npm install -D rollup-plugin-external-globals
:::
``` javascript=
// vite.config.js
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'
import externalGlobals from "rollup-plugin-external-globals"; //打包後要使用cdn的變數時需要安裝此外掛,開發時一樣可以用import引入使用.
export default defineConfig({
build: {
rollupOptions: {
//當成外部模組
external: ['vue', 'axios', 'vue-router'], //不打包 用cdn引入要記得在index.html頁面掛上cdn不然打包後會出錯
plugins: [
externalGlobals({ //打包後使用cdn的配置
vue: "Vue",
axios: 'axios',
['vue-router']: 'VueRouter'
})
],
outDir: 'dist', // 構建輸出路徑
},
})
```
``` html=
// index.html
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/vue-router@4.0.16/dist/vue-router.global.prod.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios@1.2.1/dist/axios.min.js"></script>
```
## 輔助工具
### rollup-plugin-visualizer
rollup打包體積分析,當執行npm run build進行打包時,出現打包體積的可視化面板,方便我們直觀看到性能優化前後打包的體積差異
``` javascript=
// vite.config.js
import vue from '@vitejs/plugin-vue'
import { defineConfig } from 'vite'
import {visualizer} from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [vue(),visualizer({open:true})],
})
```
## 參考資料:
* [vite配置cdn優化打包體積
](https://blog.csdn.net/m0_68324632/article/details/126828350)
* [vite vue3 初體驗
](https://dotblogs.com.tw/jason_front/2021/12/04/212149)
* [Vue3 + Vite 如何使用 CDN 加載資源](https://ainyi.com/119)