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']
},
}
},

js 算式

+加法

exp-1

1
2
let x = 100 + 50;
console.log('x=', x) // x= 150

exp-2

1
2
3
4
let a = 100;
let b = 50;
let x = a + b;
console.log('x=', x) // x= 150

exp-3

1
2
3
let a = 3;
let x = (100 + 50) * a;
console.log('x=', x) // x=450

- 減法 Subtracting

1
2
3
4
let x = 5;
let y = 2;
let z = x - y;
console.log(' z=', z) //z=3

* 乘法 Multiplying

1
2
3
4
let x = 5;
let y = 2;
let z = x * y;
console.log(' z=', z) // z= 10

/ 除法 Dividing

1
2
3
4
let x = 5;
let y = 2;
let z = x / y;
console.log(' z=', z) // z= 2.5

餘數Remainder

1
2
3
4
let x = 5;
let y = 2;
let z = x % y;
console.log(' z=', z) // z=1

遞增 Incrementing

1
2
3
4
let x = 5;
x++;
let z = x;
console.log(' z=', z) // z= 6

遞減 Decrementing

1
2
3
4
let x = 5;
x--;
let z = x;
console.log(' z=', z) // z= 4

指數運算 Exponentiation

1
2
3
let x = 5;
let z = x ** 2;
console.log(' z=', z) // z= 25

Math.pow(基底數, 指數)

Math.pow(base, exponent)

1
2
3
let x = 5;
let z = Math.pow(x,2);
console.log(' z=', z)

JavaScript Output 輸出

JavaScript 可以用不同的方式「顯示」資料:

  • innerHTML使用或 寫入 HTML 元素innerText。
  • 使用 寫入 HTML 輸出document.write()。
  • 使用 寫入警告框window.alert()。
  • 使用 寫入瀏覽器控制台console.log()。

innerHTML:使用該innerHTML屬性來改變 HTML 元素的 HTML 內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My First Paragraph</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML = "<h2>Hello World</h2>";
</script>

</body>
</html>

innerText:使用該innerText屬性來改變 HTML 元素的內部文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My First Paragraph</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerText = "Hello World";
</script>

</body>
</html>

document.write():為了測試目的,使用起來很方便document.write():

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My first paragraph.</p>

<script>
document.write(5 + 6);
</script>

</body>
</html>

window.alert()

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>
<p>My first paragraph.</p>

<script>
window.alert(5 + 6);
</script>

</body>
</html>

console.log():為了調試目的,您可以console.log()在瀏覽器中呼叫該方法來顯示資料。

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>
<html>
<body>

<script>
console.log(5 + 6);
</script>

</body>
</html>

js typeof 判斷型別

typeof

JavaScript 的內建七種型別有 number、string、boolean、null、undefined、object、symbol

string
1
2
3
var title="這是測試";
console.log(typeof title)
'string'
number
1
2
3
var numberValue = 1;
typeof numberValue
'number'
Object
1
2
3
4
5
6
7
var lists= [
{title:'首頁',href:'home'},
{title:'關於我',href:'about_us'},
{title:'登入',href:'login'},
];
typeof lists
'Object'
boolean
1
2
3
var isOpen = true;
typeof isOpen
'boolean'
undefined
1
2
typeof i
'undefined'
symbol
1
2
3
const sym1 = Symbol();
typeof sym1
'symbol'
null
1
2
3
4
5
6
const foo = null;
if(foo == null){
console.log('null')
}
typeof foo;
'symbol'
Null參考資料

Vue 安裝 Bootstrap 5

Vite Vue 利用cdn使用bootstrap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-SgOJa3DmI69IUzQ2PVdRZhwQ+dy64/BUtbMJw1MZ8t5HZApcHrRKUc4W0kG879m7" crossorigin="anonymous">
</head>
<body>
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/js/bootstrap.bundle.min.js" integrity="sha384-k6d4wzSIapyDyv1kpU366/PK5hCdSbCRGRCMv+eplOQJWyd1fbcAu9OCUj5zNLiq" crossorigin="anonymous"></script>

+ <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js" integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r" crossorigin="anonymous"></script>

+<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.5/dist/js/bootstrap.min.js" integrity="sha384-VQqxDN0EQCkWoxt/0vsQvZswzTHUVOImccYmSyhJTp7kGtPed0Qcx8rK9h9YEgx+" crossorigin="anonymous"></script>
</body>
</html>

Vue npm 安裝 Bootstrap 5

1
npm install --save bootstrap

在src/assets新增scss資料夾 新增all.scss
到node_modules/scss/variables.scss另存到src/assets/scss資料夾
到node_modules/scss/variables-dark.scss另存到src/assets/scss資料夾

1
2
3
4
5
6
7
8
9
10
//all.scss
//基本樣式
+@import "bootstrap/scss/functions";
+@import "./variables";
+@import "./variables-dark";
+@import "bootstrap/scss/bootstrap.scss";
//新增以下需要的樣式引入
@import "./public.scss";
@import "./nav.scss";
@import "./leftSide.scss";

在main.ts引入

1
2
3
4
5
6
7
import { createApp } from 'vue'
import router from './router/router'
import { createPinia } from 'pinia'

import App from './App.vue'
import "bootstrap";
import '@/assets/scss/all.scss';