Nuxt4 安裝

清除 npx 快取

確保 Nuxt CLI 不存在快取或版本上的差異,可以清除快取來重新安裝。

1
npx clear-npx-cache

Nuxt 安裝

Node版本號 22.13.1
安裝指令

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// pnpm
pnpm create nuxt@latest <project-name>
// yarn
yarn create nuxt <project-name>
// npm
npm create nuxt@latest <project-name>

create-nuxt@3.34.0
Ok to proceed? (y)


> npx
> create-nuxt nuxt_demo_project


.d$b.
i$$A$$L .d$b
.$$F` `$$L.$$A$$.
j$$' `4$$:` `$$.
j$$' .4$: `$$.
j$$` .$$: `4$L
:$$:____.d$$: _____.:$$:
`4$$$$$$$$P` .i$$$$$$$$P`

┌ Welcome to Nuxt!
│載入模板
◇ Templates loaded
◇ 從快取載入模板
◇ Templates loaded

│◆ 您想使用哪一個範本?
◆ Which template would you like to use?
content – 內容驅動網站

○ minimal – Nuxt 4 的極簡配置(建議)
│ ● minimal – Minimal setup for Nuxt 4 (recommended)
○ module – Nuxt 模組
│ ○ module – Nuxt module
●. * ui – 使用 Nuxt UI 的應用
│ ○ ui – App using Nuxt UI
◇ 在 nuxt4_demo_project 中建立項目
◇ Creating project in nuxt4_demo_project
◇ 已下載最小模板
◇ Downloaded minimal template


◆ 您想使用哪個軟體套件管理器?
◆ Which package manager would you like to use?
│ ● npm (current)
│ ○ pnpm
│ ○ yarn
│ ○ bun
│ ○ deno
◆ 初始化 Git 倉庫?
Initialize git repository?
│ No

◇ 已安裝依賴項
◇ Dependencies installed

│ ◇ 是否要瀏覽並安裝模組?
◇ Would you like to browse and install modules?
│ Yes

│ ◇ 已載入模組
◇ Modules loaded

│ ◇ 搜尋並選擇模組:
│ 0 items selected

└ ✨ Nuxt 專案是使用最小範本建立的。
└ ✨ Nuxt project has been created with the minimal template.

╭── 👉 Next steps ───────────╮
│ │
│ › cd demo_nuxt_project │
│ › npm run dev │
│ │
╰────────────────────────────╯
larahuang@larahuang Nuxt % cd demo_nuxt_project
larahuang@larahuang demo_nuxt_project % npm run dev

Nuxt 4.4.2 (with Nitro 2.13.3, Vite 7.3.2 and Vue 3.5.32)
下午1:57:17
➜ Local: http://localhost:3000/
➜ Network: use --host to expose

預設監聽 Port: 3000,若因為衝突或有需要做調整可以使用這個參數

1
2
3
npm run dev -- -p 5173
# 等價
npx nuxi dev -p 5173

建立 .env 檔案:在專案根目錄建立 .env 檔案,定義您的環境變數。

1
2
API_BASE_URL=https://example.com

清除自動產生的 Nuxt 檔案和快取

1
npx nuxi cleanup

Nuxt 3 實戰筆記

nuxt4架構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
├── .nuxt/                 # Nuxt開發中,根據目錄結構生成。
├── .output/ # Nuxt build 後的輸出目錄(用於部署)
├── .env # 環境配置檔
├── plugins/ # 套件
├── public/ # 靜態公開檔案
├── server/ # 放後端邏輯
│ └── api/
│ └── order.js # 對應 /api/order
├── app.vue # Nuxt 應用入口點
├── app.vue # 入口點
├── layouts/ # 自訂佈局
├── middleware/ # 中介層邏輯
├── assets/ # 靜態資源
├── components/ # Vue 元件
├── composables/ # 邏輯函式
├── content/ # 資料檔案
├── pages/ # 頁面檔案
├── nuxt.config.ts # Nuxt 配置設定檔(支援 TypeScript)
├── package.json # 套件與指令設定
├── tsconfig.json # TypeScript 設定
└── README.md # 專案說明

安裝Tailwindcss

參考Nuxt UI 官網

安裝 Nuxt UI 套件

1
npm install @nuxt/ui tailwindcss --save

將 Nuxt UI 模組新增到您的系統中nuxt.config.ts

1
2
3
export default defineNuxtConfig({
modules: ['@nuxt/ui']
})

在您的 CSS 中匯入 Tailwind CSS 和 Nuxt UI

app/assets/css/main.css nuxt.config.ts

1
2
3
// app/assets/css/main.css 
@import "tailwindcss";
@import "@nuxt/ui";

.vscode/settings.json

1
2
3
4
5
6
7
8
9
10
11
{
"files.associations": {
"*.css": "tailwindcss"
},
"editor.quickSuggestions": {
"strings": "on"
},
"tailwindCSS.classAttributes": ["class", "ui"],
"tailwindCSS.classFunctions": ["defineAppConfig"]
}

安裝. ElementPLus

1
2
3
npm i @element-plus/nuxt -D
npm i --save element-plus
npm i --save @element-plus/icons-vue

https://github.com/element-plus/element-plus-nuxt-starter/tree/main

配置

nuxt.config.ts

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
export default defineNuxtConfig({
// 模組新增到您的系統中nuxt
modules: [
'@nuxt/eslint',
'@nuxt/ui',
'@element-plus/nuxt'
],
// 開發者工具
devtools: {
enabled: true
},
// 樣式
css: ['~/assets/scss/main.scss'],
// 路由規則
routeRules: {
// 預渲染
'/': { prerender: true }
},
// 相容性日​​期
compatibilityDate: '2025-01-15',
// 相容性日​​期
vite: {
css: {
// 預處理器選項:
preprocessorOptions: {
scss: {
// 附加數據
additionalData: `@use "@/assets/scss/element/index.scss" as element;`
}
}
}
},
// elementPlus
elementPlus: {
icon: 'el-icon',
importStyle: 'scss',
themes: ['dark']
}
})

Nuxt4 Layouts 佈局

Layouts

參考資料
透過在你的 app.vue 中加入 來啟用 Layouts。
app/app.vue

1
2
3
4
5
<template>
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</template>

新增一個 ~/layouts/default.vue
app/layouts/default.vue
在佈局檔案中,頁面的內容將會顯示在 元件中。

1
2
3
4
5
6
<template>
<div>
<p>所有頁面共享一些預設佈局內容</p>
<slot />
</div>
</template>

具名佈局(Named Layout)

1
2
3
-| layouts/
---| default.vue
---| custom.vue

你可以在頁面中使用 custom 佈局
pages/about.vue

1
2
3
4
5
6
7
8
9
10
11
<script setup lang="ts">
declare module 'nuxt/app' {
interface NuxtLayouts {
'custom': unknown
}
}
// ---cut---
definePageMeta({
layout: 'custom',
})
</script>

你可以使用 的 name 屬性直接覆寫所有頁面的預設佈局。
app/app.vue

1
2
3
4
5
6
7
8
9
10
<script setup lang="ts">
// 您可能會根據 API 呼叫或登入狀態來選擇此項目。
const layout = 'custom'
</script>

<template>
<NuxtLayout :name="layout">
<NuxtPage />
</NuxtLayout>
</template>

Nuxt4 環境變數

1.在根目錄新增.env

1
2
API_BASE_URL=https://example.com
DB_PASSWORD=your_secret_password

2.nuxt.config.ts設定

在 nuxt.config.ts 中綁定變數

1
2
3
4
5
6
7
8
9
10
11
12
export default defineNuxtConfig({
//
runtimeConfig: {
// 伺服器端私有變數
dbPassword: process.env.DB_PASSWORD,

// 公開變數(也會暴露給客戶端)
public: {
apiBaseUrl: process.env.API_BASE_URL,
}
}
})

3. process問題

解決方法,安裝 @types/node

1
npm i --save-dev @types/node 

專案根目錄建立檔案 server/api/test.ts:

1
2
3
4
5
6
7
8
export default defineEventHandler((event) => {
const config = useRuntimeConfig()

// 這會在您的終端機(Terminal)印出,而不是瀏覽器
// console.log('伺服器端讀取密碼:', config.dbPassword)

return { success: true }
})

在頁面或組件中讀取

範例放在app.vue

1
2
3
4
5
6
7
8
9
<script setup lang="ts" >
const runtimeConfig = useRuntimeConfig()

// 讀取公開變數(客戶端與伺服器皆可見)
console.log('讀取公開變數(客戶端與伺服器皆可見)',runtimeConfig.public.apiBaseUrl)

console.log('伺服器端讀取密碼:',runtimeConfig.dbPassword)

</script>

Nuxt4 如何部署vercel

nuxt如何部署vercel

一、修改本機專案配置 Nitro 預設:在 nuxt.config.ts 中將 nitro 預設為 vercel。
1.

1
2
3
4
5
6
7
//打字稿
導出預設的defineNuxtConfig({
硝基:{
預設:'vercel'
}
})

2.提交程式碼:確保您的程式碼已經透過 Git 初始化並自動至 GitHub、GitLab 或 Bitbucket 倉庫。
二、Vercel導入與部署登入Vercel儀表板。點選新增新建,選擇項目。授權並選擇您的GitHub倉庫,點擊匯入。 Vercel環境變數中填入。點選部署,等待建置即可完成上線。
nuxt.config.ts 中加入硝基.vercel.config 參數。環境變數管理:如果您使用 dotenv,可以透過 Dotenv Nuxt 官方的 Nuxt 部署至 Vercel 指南或 iT 邦幫忙 Vercel 部署攻略。

Vite Vue 2025

Vite Vue 安裝

版本號
node v22.14.0 && npm 11.4.2

參考資料:
https://vite.dev/guide/

安裝

1
npm create vite@latest 資料名稱
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
> npx
> "create-vite" vite_vue_demo_project


◆ Select a framework:
│ ● Vanilla
│ ○ Vue
│ ○ React
│ ○ Preact
│ ○ Lit
│ ○ Svelte
│ ○ Solid
│ ○ Qwik
│ ○ Angular
│ ○ Marko
│ ○ Others



◇ Select a framework:
│ Vue

◇ Select a variant:
│ TypeScript

◇ Use rolldown-vite (Experimental)?:
參考資料:https://cn.vite.dev/guide/rolldown
│ Yes

◆ Install with npm and start now?
│ ● Yes / ○ No

Vue Router &&

Router

Vue Router

安裝 Vue Router

Vue Router installation
安裝指令

1
npm create vue@latest

路由

Step 1 建立路由與頁面
Step 2 引入 main.js
Step 3 src別名

Step 1 建立路由與頁面

  • 前置作業src建立router/index.js
  • src建立
    views/Home/index.vue
    views/AboutMe/index.vue
    views/errorPage/404.vue

src/router/index.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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// src/router/index.js
import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'

const webTitle = "關於Lara || ";

const options = {
// history: createWebHashHistory(),
history: createWebHistory(),//井字號會不顯示
routes:[
{
path: '/',
name:'首頁',
component: () => import("@/views/Home/index.vue"),
meta:{title:webTitle+'首頁'}
},
{
path: '/about',
name:'關於我們',
component: () => import("@/views/AboutMe/index.vue"),
meta:{title:webTitle+'關於我們'}
},
{
path: '/:catchAll(.*)',
name: '404',
component: () => import('../views/errorPage/404.vue'),
meta: {
title:webTitle+'404'
},
}
],
}

const router = createRouter(options)
// 導航守衛
router.beforeEach( (to, from, next) => {
// webTitle
document.title = to.meta.title || webTitle + '首頁';
next();
})

// 輸出router
export default router
  • 每個頁面設定meta:{title:webTitle+'首頁'}
  • webTitle
    router.beforeEach => document.title;即是 webTitle;
    從導航守衛 改變webTitle: to.meta.title
#### views/Home/index.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<template>
<div>
<div>{{ title }}</div>
</div>
</template>

<script setup>
import { ref } from "vue";
const title =ref('Home')
</script>

<style lang="scss" scoped>

</style>

views/AboutMe/index.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<template>
<div>
<div>{{ title }}</div>
</div>
</template>

<script setup>
import {ref} from "vue";
const title =ref('About Me')
</script>

<style lang="scss" scoped>

</style>

views/errorPage/404.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
<template>
<div>
<h1>{{ title }}</h1>
<button @click="$router.push('/')">回首頁</button>
</div>
</template>


<script setup>
import { ref } from 'vue';
const title = ref('404');
</script>

Step 2 引入 main.js

1
2
3
4
5
6
7
8
9
import { createApp } from 'vue'
import './style.css'
+ import router from "./router/index";
import App from './App.vue'

const app = createApp(App)
+ app.use(router)
app.mount('#app')

Step 3 src別名

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
// vite.config.js
+ import { fileURLToPath, URL } from "node:url";
import { defineConfig } from 'vite'

import vue from '@vitejs/plugin-vue'


export default defineConfig(({ mode, command }) =>
{
console.log('目前模式', mode),
console.log('目前command',command)
return {
plugins: [
vue(),
],
// src別名
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},

}
});

ESLint

安裝 ESLint

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
import js from '@eslint/js';
import vue from 'eslint-plugin-vue';
import globals from 'globals';
// 使用 auto-import 時需設定
// import autoImportGlobals from './.eslint-auto-import.js';

export default [
js.configs.recommended,
...vue.configs['flat/recommended'],
{
languageOptions: {
ecmaVersion: 2021,
sourceType: 'module',
globals: {
...globals.browser,
...globals.es2021,
...globals.node,
// 使用 auto-import 時需設定
// ...autoImportGlobals.globals
}
},
rules: {
// ========== 基本規則 ==========
// 禁用 var,必須使用 const 或 let
'no-var': 'error',
'prefer-const': 'error',

// 分號使用規則
semi: ['error', 'always'],
'semi-spacing': ['error', { before: false, after: true }],

// 引號使用規則 - 統一使用單引號
quotes: ['error', 'single', {
avoidEscape: true,
allowTemplateLiterals: true
}],

// ========== 格式化 ==========
// 縮排規則 - 使用 2 個空格
indent: ['error', 2, {
SwitchCase: 1,
VariableDeclarator: 1,
outerIIFEBody: 1,
MemberExpression: 1,
FunctionDeclaration: { parameters: 1, body: 1 },
FunctionExpression: { parameters: 1, body: 1 },
CallExpression: { arguments: 1 },
ArrayExpression: 1,
ObjectExpression: 1,
ImportDeclaration: 1,
flatTernaryExpressions: false,
ignoreComments: false
}],

// 換行和空行規則
'max-len': ['warn', {
code: 100,
ignoreUrls: true,
ignoreStrings: true,
ignoreTemplateLiterals: true
}],
'eol-last': ['error', 'always'],
'no-multiple-empty-lines': ['error', { max: 2, maxEOF: 1 }],

// 逗號規則
'comma-dangle': ['error', 'never'],
'comma-spacing': ['error', { before: false, after: true }],
'comma-style': ['error', 'last'],

// 括號規則
'brace-style': ['error', '1tbs', { allowSingleLine: true }],
curly: ['error', 'all'],

// ========== 變數命名規則 ==========
// 駝峰命名法
camelcase: ['error', {
properties: 'always',
ignoreDestructuring: false,
ignoreImports: false,
ignoreGlobals: false
}],

// 禁止未使用的變數
'no-unused-vars': ['error', {
vars: 'all',
args: 'after-used',
ignoreRestSiblings: true
}],

// 變數必須先宣告後使用
'no-undef': 'error',

// ========== 函數規則 ==========
// 函數名稱規則
'func-names': ['warn', 'as-needed'],
'func-style': ['error', 'declaration', { allowArrowFunctions: true }],

// 箭頭函數規則
'arrow-spacing': ['error', { before: true, after: true }],
'arrow-parens': ['error', 'as-needed'],
'prefer-arrow-callback': ['error', { allowNamedFunctions: false }],

// ========== 物件和陣列規則 ==========
// 物件簡寫語法
'object-shorthand': ['error', 'always'],
'quote-props': ['error', 'as-needed'],

// 解構賦值
'prefer-destructuring': ['warn', {
array: true,
object: true
}, {
enforceForRenamedProperties: false
}],

// ========== 比較運算符規則 ==========
// 使用嚴格等號
eqeqeq: ['error', 'always', { null: 'ignore' }],
'no-eq-null': 'off',

// ========== 錯誤處理規則 ==========
// 禁止空的 catch 區塊
'no-empty': ['error', { allowEmptyCatch: false }],

// Promise 錯誤處理
'prefer-promise-reject-errors': 'error',

// ========== 安全性規則 ==========
// 禁止使用 eval
'no-eval': 'error',
'no-implied-eval': 'error',

// 禁止使用全域變數
'no-implicit-globals': 'error',

// 禁止修改參數
'no-param-reassign': ['error', { props: false }],

// ========== 程式碼品質規則 ==========
// 禁止 console.log (除了開發環境)
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn',

// 禁止未使用的表達式
'no-unused-expressions': ['error', {
allowShortCircuit: true,
allowTernary: true
}],

// ========== 註解規則 ==========
// JSDoc 相關
'spaced-comment': ['error', 'always', {
line: { markers: ['/'] },
block: { markers: ['*'], balanced: true }
}],

// ========== 模組化規則 ==========
// ES6 模組
'prefer-template': 'error',
'template-curly-spacing': ['error', 'never']
}
},
// Vue
{
files: ['**/*.vue'],
rules: {
// Vue 檔案命名
'vue/match-component-file-name': ['error', {
extensions: ['vue'],
shouldMatchCase: true
}],
'vue/multi-word-component-names': 'off',
'vue/component-api-style': ['error', ['script-setup', 'composition']],
'vue/prop-name-casing' : ['off', 'camelCase'],
'vue/attribute-hyphenation': 'off',
'eslintvue/v-on-event-hyphenation':'off',
'vue/component-definition-name-casing': ['off', 'PascalCase'],
'vue/component-name-in-template-casing': ['off', 'kebab-case']
}
},
{
ignores: ['dist/', 'node_modules/', 'public/', 'vite.config.js']
}
];

Vue Sass error

Deprecation Warning: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import
@import "mixins/banner";
│ ^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/bootstrap.scss 1:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import


7 │ @import "functions";
│ ^^^^^^^^^^^

node_modules/bootstrap/scss/bootstrap.scss 7:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import


8 │ @import "variables";
│ ^^^^^^^^^^^

node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import


9 │ @import "variables-dark";
│ ^^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/bootstrap.scss 9:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [import]: Sass @import rules are deprecated and will be removed in Dart Sass 3.0.0.

More info and automated migrator: https://sass-lang.com/d/import


10 │ @import "maps";
│ ^^^^^^

node_modules/bootstrap/scss/bootstrap.scss 10:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [global-builtin]: Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import


207 │ @return mix(white, $color, $weight);
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 207:11 tint-color()
node_modules/bootstrap/scss/_variables.scss 79:12 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [global-builtin]: Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import


212 │ @return mix(black, $color, $weight);
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 212:11 shade-color()
node_modules/bootstrap/scss/_variables.scss 84:12 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [global-builtin]: Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use color.mix instead.

More info and automated migrator: https://sass-lang.com/d/import


342 │ $light-bg-subtle: mix($gray-100, $white) !default;
│ ^^^^^^^^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/_variables.scss 342:27 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [global-builtin]: Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use math.unit instead.

More info and automated migrator: https://sass-lang.com/d/import


11 │ @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" {
│ ^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 11:30 -assert-ascending()
node_modules/bootstrap/scss/_variables.scss 494:1 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [global-builtin]: Global built-in functions are deprecated and will be removed in Dart Sass 3.0.0.
Use math.unit instead.

More info and automated migrator: https://sass-lang.com/d/import


11 │ @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" {
│ ^^^^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 11:51 -assert-ascending()
node_modules/bootstrap/scss/_variables.scss 494:1 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [color-functions]: red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions


185 │ "r": red($color),
│ ^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 185:10 luminance()
node_modules/bootstrap/scss/_functions.scss 174:8 contrast-ratio()
node_modules/bootstrap/scss/_functions.scss 159:22 color-contrast()
node_modules/bootstrap/scss/_variables.scss 846:42 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [color-functions]: green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions


186 │ "g": green($color),
│ ^^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 186:10 luminance()
node_modules/bootstrap/scss/_functions.scss 174:8 contrast-ratio()
node_modules/bootstrap/scss/_functions.scss 159:22 color-contrast()
node_modules/bootstrap/scss/_variables.scss 846:42 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [color-functions]: blue() is deprecated. Suggestion:

color.channel($color, "blue", $space: rgb)

More info: https://sass-lang.com/d/color-functions


187 │ "b": blue($color)
│ ^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 187:10 luminance()
node_modules/bootstrap/scss/_functions.scss 174:8 contrast-ratio()
node_modules/bootstrap/scss/_functions.scss 159:22 color-contrast()
node_modules/bootstrap/scss/_variables.scss 846:42 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [color-functions]: red() is deprecated. Suggestion:

color.channel($color, "red", $space: rgb)

More info: https://sass-lang.com/d/color-functions


37 │ @return red($value), green($value), blue($value);
│ ^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 37:11 to-rgb()
node_modules/bootstrap/scss/_variables.scss 846:31 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [color-functions]: green() is deprecated. Suggestion:

color.channel($color, "green", $space: rgb)

More info: https://sass-lang.com/d/color-functions


37 │ @return red($value), green($value), blue($value);
│ ^^^^^^^^^^^^^

node_modules/bootstrap/scss/_functions.scss 37:24 to-rgb()
node_modules/bootstrap/scss/_variables.scss 846:31 @import
node_modules/bootstrap/scss/bootstrap.scss 8:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [mixed-decls]: Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

┌──> node_modules/bootstrap/scss/_reboot.scss
503 │ font-weight: $legend-font-weight;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ declaration

┌──> node_modules/bootstrap/scss/vendor/_rfs.scss
136 │ ┌ @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
137 │ │ @content;
138 │ │ }
│ └─── nested rule

node_modules/bootstrap/scss/_reboot.scss 503:3 @import
node_modules/bootstrap/scss/bootstrap.scss 16:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [mixed-decls]: Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

┌──> node_modules/bootstrap/scss/_reboot.scss
504 │ line-height: inherit;
│ ^^^^^^^^^^^^^^^^^^^^ declaration

┌──> node_modules/bootstrap/scss/vendor/_rfs.scss
136 │ ┌ @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
137 │ │ @content;
138 │ │ }
│ └─── nested rule

node_modules/bootstrap/scss/_reboot.scss 504:3 @import
node_modules/bootstrap/scss/bootstrap.scss 16:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [mixed-decls]: Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

┌──> node_modules/bootstrap/scss/_type.scss
38 │ font-family: $display-font-family;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ declaration

┌──> node_modules/bootstrap/scss/vendor/_rfs.scss
136 │ ┌ @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
137 │ │ @content;
138 │ │ }
│ └─── nested rule

node_modules/bootstrap/scss/_type.scss 38:5 @import
node_modules/bootstrap/scss/bootstrap.scss 17:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [mixed-decls]: Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

┌──> node_modules/bootstrap/scss/_type.scss
39 │ font-style: $display-font-style;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ declaration

┌──> node_modules/bootstrap/scss/vendor/_rfs.scss
136 │ ┌ @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
137 │ │ @content;
138 │ │ }
│ └─── nested rule

node_modules/bootstrap/scss/_type.scss 39:5 @import
node_modules/bootstrap/scss/bootstrap.scss 17:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

Deprecation Warning [mixed-decls]: Sass's behavior for declarations that appear after nested
rules will be changing to match the behavior specified by CSS in an upcoming
version. To keep the existing behavior, move the declaration above the nested
rule. To opt into the new behavior, wrap the declaration in `& {}`.

More info: https://sass-lang.com/d/mixed-decls

┌──> node_modules/bootstrap/scss/_type.scss
40 │ font-weight: $display-font-weight;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ declaration

┌──> node_modules/bootstrap/scss/vendor/_rfs.scss
136 │ ┌ @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
137 │ │ @content;
138 │ │ }
│ └─── nested rule

node_modules/bootstrap/scss/_type.scss 40:5 @import
node_modules/bootstrap/scss/bootstrap.scss 17:9 @use
src/assets/styles/base.scss 1:1 root stylesheet

在 vite_confog.

1
2
3
4
5
6
7
8
9
10
11
12
export default defineConfig({
plugins: [
....
],
//加入以下
css: {
preprocessorOptions: {
scss: {
silenceDeprecations: ['mixed-decls', 'color-functions', 'global-builtin', 'import']
},
}
},