vite.config.js配置入門詳解


 

 
本文主要介紹了vite.config.js配置入門詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
 

1 如何創建vite項目?

1
2
3
4
5
6
7
8
9
10
11
step 1 :
  npm init vite@latest
  yarn create vite
step2 :
npm init vite@latest my-vue-app --template vue
  
npm 7+, 需要額外的雙橫線:
npm init vite@latest my-vue-app -- --template vue
  
# yarn
yarn create vite my-vue-app --template vue

2 如何讓vite項目啟動時自動打開瀏覽器?

注:vite針對開發環境,打包環境和預覽環境分別定義了三個選項: server、build、preview。 開發環境server類似於webpack中的devServer。

1
2
3
4
5
6
7
export default ({mode})=>{
return defineConfig({
   server:{
    open: true , //vite項目啟動時自動打開瀏覽器
   },
}
}

3vite啟動默認端口為3000?如何更改默認端口?

1
2
3
4
5
6
7
export default ({mode})=>{
return defineConfig({
   server:{
    port:8080, //vite項目啟動時自定義端口
   },
}
}

4 vite如何設置熱更新?

vite默認開發環境關閉了熱更新。代碼更改需要手動更新,設置更改代碼自動刷新頁面需要設置hmr:true

1
2
3
4
5
6
7
export default ({mode})=>{
return defineConfig({
   server:{
    hmr: true , //開啟熱更新
   },
}
}

5vite中如何配置別名路徑?

設置resolver選項

1
2
3
4
5
6
7
8
9
10
11
12
import { resolve } from 'path' ;
  
export default ({mode})=>{
return defineConfig({
   resolve:{
      alias:{
        "@" :resolve(__dirname, "src" ),
        "@c" :resolve(__dirname, "src/components" ),
      }
   },
}
}

6 vite中如何設置便捷圖片路徑引用?

比如圖片資源都在src/assets/image目錄下,不想在項目中每次都通過require("../assets/image/1.jpg")這樣寫一長串去引用。能否通過 類似nuxt中的快速引用?

1
2
< img src = "/images/1.png" alt = "" />
這里直接引用
1
2
3
4
5
6
7
8
9
10
export default ({mode})=>{
return defineConfig({
   resolve:{
      alias:{
      "/images" : "src/assets/images/"
      //這里不能通過path模塊解析路徑的寫法
      }
   },
}
}

7如何把vite打包以后的js,css和img資源分別分門別類在js/css/img文件夾中?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//由於是處理打包以后的資源,所以需要配置build選項
export default ({mode})=>{
return defineConfig({
    build:{
    assetsDir: "static" ,
    rollupOptions:{
       
      input:{
        index:resolve(__dirname, "index.html" ),
        project:resolve(__dirname, "project.html" )
      },
      output:{
        chunkFileNames: 'static/js/[name]-[hash].js' ,
        entryFileNames: "static/js/[name]-[hash].js" ,
        assetFileNames: "static/[ext]/name-[hash].[ext]"
      }
    },
   },
  
}
}

8 如何通過vite給項目配置多個環境?

以開發、測試和生產環境為例

(1)在項目根目錄下分別新建.env.development,.env.test,.env.production文件

1
2
3
4
5
6
7
8
9
//.env.devopment文件內容
NODE_ENV="development"
VITE_APP_BASEAPI="https://www.dev.com"
//.env.test文件內容
NODE_ENV="test"
VITE_APP_BASEAPI="https://www.test.com"
//.env.production文件內容
NODE_ENV="production"
VITE_APP_BASEAPI="https://www.production.com"

(2) package.json文件做如下修改

1
2
3
4
5
6
  "scripts" : {
    "dev" : "vite --mode development" ,
    "build" : "vite build --mode production" ,
    "test" : "vite build --mode test" ,
    "preview" : "vite preview"
   },

(3)項目中通過Import.meta.env.VITE_APP_BASEAPI來獲取對應環境的值

1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
   <div>
    <Item></Item>
   </div>
  
</template>
<script setup>
    import { defineComponent, onMounted, ref } from 'vue'
    import Item from "@c/item.vue"
    console.log( "env" , import.meta.env.VITE_APP_BASEAPI)
    console.log( "可選鏈" , obj?.gender || "male" )
})
</script>

9 vite中如何配置多入口,進行多頁面開發?

step1:在根目錄新建一個入口頁面以project.html為例,同時在根目錄下新建一個project文件夾,在此文件夾新建一個main.js,App.vue

step2:vite.config.js作如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import { defineConfig,loadEnv  } from 'vite'
import {resolve} from "path" ;
 
export default ({mode})=>{
return defineConfig({
   build:{
    rollupOptions:{
      input:{
        index:resolve(__dirname, "index.html" ),
        project:resolve(__dirname, "project.html" )
      },
      //output:{
        // chunkFileNames:'static/js/[name]-[hash].js',
        //entryFileNames:"static/js/[name]-[hash].js",
        //assetFileNames:"static/[ext]/name-[hash].[ext]"
      }
    },
   },
 
   plugins: [
    vue(),
   ]
})
 

 step3:vite run dev 啟動以后在url加上project.html查看project項目 localhost:3000/project.html

10 如何設置開啟生產打包分析文件大小功能?類似webpack-bundle-analyzer?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//1 安裝rollup-plugin-visualizer 插件
npm i rollup-plugin-visualizer
//2 vite.config.js中引入插件
import {visualizer} from "rollup-plugin-visualizer"
export default ({mode:string})=>{
  
   const plugins=[ 
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()]
    }),
    visualizer({
        open: true ,   //注意這里要設置為true,否則無效
        gzipSize: true ,
        brotliSize: true
      })
   ];
  }
  return   defineConfig({
             
            resolve:{
              alias:{
                "@" :resolve(__dirname, "src" ),
                "/images" : "src/assets/images/"
              }
            },
            plugins
          })

11 如何解決require is not define報錯的的問題? 場景: 比如我們assets文件夾下有一個靜態的json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
        list:[
            {
                shop_id:1,
                shop_name: '搜獵人藝術生活' ,
                products:[
                    {
                        pro_id:101,
                        text: '洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶' ,
                        price:480,
                        num:1,
                        img:require( "./images/1.png" ),
                        sum:480,
                        checked: false //商品選中狀態
                    },
                    {
                        pro_id:102,
                        text: '花露水花露水花露水花露水花露水花露水花露水花露水' ,
                        price:680,
                        num:1,
                        img:require( './images/2.png' ),
                        sum:680,
                        checked: false
                    },
                    {
                        pro_id:103,
                        text: '燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片' ,
                        price:380,
                        num:1,
                        img:require( './images/3.png' ),
                        sum:380,
                        checked: false
                    }
                ],
                check: false , //店鋪選中狀態
                choose:0, //商品選中個數
            },
            {
                shop_id:2,
                shop_name: '卷卷旗艦店' ,
                products:[
                    {
                        pro_id:201,
                        text: '剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀' ,
                        price:580,
                        num:1,
                        img:require( './images/4.png' ),
                        sum:580,
                        checked: false
                    },
                    {
                        pro_id:202,
                        text: '衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙' ,
                        price:780,
                        num:1,
                        img:require( './images/5.png' ),
                        sum:780,
                        checked: false
                    }
                ],
                check: false ,
                choose:0,
            },
            
        ],
    status: false , //全選選中狀態
    allchoose:0, //店鋪選中個數
    allsum:0, //總計價格
    allnum:0, //總計數量
}
export default fetchData

此時運行你回發現報錯:require is not define? 解決辦法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const fetchData={
        list:[
            {
                shop_id:1,
                shop_name: '搜獵人藝術生活' ,
                products:[
                    {
                        pro_id:101,
                        text: '洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶洗面奶' ,
                        price:480,
                        num:1,
                        img: new URL( "./images/1.png" ,import.meta.url).href,
                        sum:480,
                        checked: false //商品選中狀態
                    },
                    {
                        pro_id:102,
                        text: '花露水花露水花露水花露水花露水花露水花露水花露水' ,
                        price:680,
                        num:1,
                        img: new URL( './images/2.png' ,import.meta.url).href,
                        sum:680,
                        checked: false
                    },
                    {
                        pro_id:103,
                        text: '燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片燕麥片' ,
                        price:380,
                        num:1,
                        img: new URL( './images/3.png' ,import.meta.url).href,
                        sum:380,
                        checked: false
                    }
                ],
                check: false , //店鋪選中狀態
                choose:0, //商品選中個數
            },
            {
                shop_id:2,
                shop_name: '卷卷旗艦店' ,
                products:[
                    {
                        pro_id:201,
                        text: '剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀剃須刀' ,
                        price:580,
                        num:1,
                        img: new URL( './images/4.png' ,import.meta.url).href,
                        sum:580,
                        checked: false
                    },
                    {
                        pro_id:202,
                        text: '衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙衛生紙' ,
                        price:780,
                        num:1,
                        img: new URL( './images/5.png' ,import.meta.url).href,
                        sum:780,
                        checked: false
                    }
                ],
                check: false ,
                choose:0,
            },
             
        ],
    status: false , //全選選中狀態
    allchoose:0, //店鋪選中個數
    allsum:0, //總計價格
    allnum:0, //總計數量
}
export default fetchData

注意引用方式的變化:require------->new URL('./images/5.png',import.meta.url).href

到此這篇關於vite.config.js配置入門詳解的文章就介紹到這了,更多相關vite.config.js配置內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM