快速构建Vue3项目

快速构建Vue3项目

Marzm

Vue3 提供的语法提示功能插件 – Volar

Node.js 的下载

中文官网:https://nodejs.org/zh-cn

镜像站点:https://npmmirror.com/mirrors/node/

更换 npmmirror 镜像源

修改 npm 至新的淘宝镜像源:

1
npm config set registry https://registry.npmmirror.com

查看当前使用的镜像地址命令

1
npm config get registry

如果返回 https://registry.npmmirror.com 说明镜像配置成功。

使用 pnpm 代替 npm

通过 npm安装,也可以在官网查看其他安装方式

Windows 系统

1
2
3
4
1.Windows 系统
npm install -g pnpm
2.Mac 系统
sudo npm install -g pnpm

Vue 项目启动套件

Fantastic-startkit 官方文档

使用本套件前,需要在本地依次安装好 Node.js , pnpm , Git Visual Studio Code

Node.js 需要使用 14.18+ / 16+ 版本,建议为 18.12+ 版本。

然后在 Visual Studio Code 里安装好以下扩展:

使用 Vite 构建 vue 项目的方法

安装 Vue3+Pinia+VueRouter

1
2
3
npm init vue@latest
或者
pnpm create vue

依次需要配置项目名 、选择自己需要的插件

cd vue3 进入创建的项目包

npm i/ yarn /pnpm下载项目所需的依赖

npm run dev / yarn dev /pnpm dev运行项目

到这一个 vite + vue 的项目最基本的框架就已经搭建完成了

代码联想提示路径

我们在使用 fileURLToPath的时候没有提示,我们需要安装一下node的类型库

1
pnpm add @types/node -D

vite.config.js中填写

1
2
3
4
5
6
7
8
9
import { fileURLToPath } from 'url'
export default {
// ...省略其他
resolve:{
alias:{
"@": fileURLToPath(new URL('src', import.meta.url))
}
}
}

配置完成后,我们在项目中尝试引用,发现并没有路径提示,那么我们还需要在 jsconfig.json中做一下配置

1
2
3
4
5
6
7
8
9
{
"compilerOptions" : {
//其他配置
"baseUrl" : "./",
"paths" : {
"@/*":["src/*"]
}
}
}

Eslint代码规范

首先安装 Eslint

1
pnpm i -D eslint

生成配置文件

1
2
//生成配置文件,.eslintrc.js 
npx eslint --init

@antfu/eslint-config基础配置

更多配置请访问 antfu/eslint-config

  1. 安装
1
pnpm add -D eslint @antfu/eslint-config
  1. 配置
1
2
3
4
//在根目录下的 `.eslintrc`
{
"extends": "@antfu"
}
  1. vscode自动保存修复
    首先要安装 VS Code ESLint extension 然后创建 .vscode/settings.json
1
2
3
4
5
6
7
{
"prettier.enable": false,
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}

Sass 预处理的安装

为什么使用 sass 可以查看 Sass 和 Less 的区别和使用

1
pnpm install --save-dev sass

按需导入插件的配置

按需导入 vue 和 vue-router 相关函数 + Element Plus

需要用到两个插件 unplugin-vue-components、``unplugin-auto-import这两个插件。

首先安装这两个插件

1
2
3
4
1.安装按需导入插件
pnpm i unplugin-vue-components unplugin-auto-import -D
2.安装ElementPlus
pnpm install element-plus

然后配置 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
26
27
28
29
30
31
32
33
34
import { fileURLToPath, URL } from 'node:url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//按需引入插件
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
//按需引入ElementPlus
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
AutoImport({
//自动导入 vue 和 vue-router 相关函数
imports: ['vue', 'vue-router'],
//自动导入 ElementPlus
resolvers: [ElementPlusResolver()],
}),
Components({
// dirs 指定组件所在位置,默认为 src/components
// 可以让我们使用自己定义组件的时候免去 import 的麻烦
dirs: ['src/components/'],
// 配置需要将哪些后缀类型的文件进行自动按需引入
extensions: ['vue'],
// 解析的 UI 组件库
resolvers: [ElementPlusResolver()],
}),
],
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),
},
},
})

Axios 的安装及二次封装

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
1.安装`Axios`
pnpm install axios
2.在 scr 目录下新建 `utils/request.js`
import axios from 'axios'

//1. 创建axios对象
const service = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 3000,
})

//2. 请求拦截器
service.interceptors.request.use(
(config) => {
return config
},
(error) => {
Promise.reject(error)
}
)

//3. 响应拦截器
service.interceptors.response.use(
(response) => {
//判断code码
return response.data
},
(error) => {
return Promise.reject(error)
}
)

export default service

重置默认样式

Normalize CSS: 点击查看更多
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
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */

/* Document
========================================================================== */

/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/

html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}

/* Sections
========================================================================== */

/**
* Remove the margin in all browsers.
*/

body {
margin: 0;
}

/**
* Render the `main` element consistently in IE.
*/

main {
display: block;
}

/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/

h1 {
font-size: 2em;
margin: 0.67em 0;
}

/* Grouping content
========================================================================== */

/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/

hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}

/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/

pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}

/* Text-level semantics
========================================================================== */

/**
* Remove the gray background on active links in IE 10.
*/

a {
background-color: transparent;
}

/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/

abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}

/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/

b,
strong {
font-weight: bolder;
}

/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/

code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}

/**
* Add the correct font size in all browsers.
*/

small {
font-size: 80%;
}

/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/

sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}

sub {
bottom: -0.25em;
}

sup {
top: -0.5em;
}

/* Embedded content
========================================================================== */

/**
* Remove the border on images inside links in IE 10.
*/

img {
border-style: none;
}

/* Forms
========================================================================== */

/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/

button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}

/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/

button,
input {
/* 1 */
overflow: visible;
}

/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/

button,
select {
/* 1 */
text-transform: none;
}

/**
* Correct the inability to style clickable types in iOS and Safari.
*/

button,
[type='button'],
[type='reset'],
[type='submit'] {
-webkit-appearance: button;
}

/**
* Remove the inner border and padding in Firefox.
*/

button::-moz-focus-inner,
[type='button']::-moz-focus-inner,
[type='reset']::-moz-focus-inner,
[type='submit']::-moz-focus-inner {
border-style: none;
padding: 0;
}

/**
* Restore the focus styles unset by the previous rule.
*/

button:-moz-focusring,
[type='button']:-moz-focusring,
[type='reset']:-moz-focusring,
[type='submit']:-moz-focusring {
outline: 1px dotted ButtonText;
}

/**
* Correct the padding in Firefox.
*/

fieldset {
padding: 0.35em 0.75em 0.625em;
}

/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/

legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}

/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/

progress {
vertical-align: baseline;
}

/**
* Remove the default vertical scrollbar in IE 10+.
*/

textarea {
overflow: auto;
}

/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/

[type='checkbox'],
[type='radio'] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}

/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/

[type='number']::-webkit-inner-spin-button,
[type='number']::-webkit-outer-spin-button {
height: auto;
}

/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/

[type='search'] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}

/**
* Remove the inner padding in Chrome and Safari on macOS.
*/

[type='search']::-webkit-search-decoration {
-webkit-appearance: none;
}

/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/

::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}

/* Interactive
========================================================================== */

/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/

details {
display: block;
}

/*
* Add the correct display in all browsers.
*/

summary {
display: list-item;
}

/* Misc
========================================================================== */

/**
* Add the correct display in IE 10+.
*/

template {
display: none;
}

/**
* Add the correct display in IE 10.
*/

[hidden] {
display: none;
}

常用工具库整合

  1. @vueuse/core 是一个包,封装了常见的一些交互逻辑

    官方地址:https://vueuse.org/guide/

    中文文档:http://www.vueusejs.com/

    1
    npm install @vueuse/core
  2. CryptoJS是一个 JavaScript 的加解密的工具包。它支持多种的算法:MD5SHA1SHA2SHA3RIPEMD-160 哈希散列,进行 AESDESRabbitRC4Triple DES 加解密。

Github 地址:https://github.com/brix/crypto-js

1
npm install crypto-js
  1. Pinna 的数据持久化

    官方地址:https://prazdevs.github.io/pinia-plugin-persistedstate/

    别人的教程: https://juejin.cn/post/7094552264739651615

    1
    npm install pinia-plugin-persistedstate
  2. 国际化插件:vue-i18n
    vue3 中使用该插件,需要安装 9 版本的

地址:https://vue-i18n.intlify.dev/

1
npm install vue-i18n@9
  1. 虚拟滚动条插件:nprogress.js

github 地址:https://github.com/rstacruz/nprogress

  1. 滑动验证码插件

github 地址:https://github.com/lirongtong/miitvip-captcha

  1. 动画插件:@vueuse/motion

官方地址:https://motion.vueuse.org/

  • 标题: 快速构建Vue3项目
  • 作者: Marzm
  • 创建于: 2023-04-06 15:28:59
  • 更新于: 2023-06-14 01:54:36
  • 链接: https://marzm.cn//post/vue3.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论