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配置內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!