4 | Edit
5 | components/HelloWorld.vue to test hot module replacement.
6 |
61 |
62 |
63 |
64 | SFC定义默认使用`setup script`,语法比较激进,但更简洁,好评!
65 |
66 |
67 |
68 | #### 别名定义
69 |
70 | 不再需要像`vite1`一样在别名前后加上`/`,这和`webpack`项目配置可以保持一致便于移植,好评!
71 |
72 | ```js
73 | import path from 'path'
74 |
75 | export default {
76 | alias: {
77 | "@": path.resolve(__dirname, "src"),
78 | "comps": path.resolve(__dirname, "src/components"),
79 | },
80 | }
81 | ```
82 |
83 | `App.vue`里面用一下试试
84 |
85 | ```vue
86 |
89 | ```
90 |
91 |
92 |
93 | #### 插件API重新设计
94 |
95 | `Vite2`主要变化在插件体系,这样更标准化、易扩展。`Vite2`插件API扩展自`Rollup`插件体系,因此能兼容现存的`Rollup`插件,编写的Vite插件也可以同时运行于开发和创建,好评!
96 |
97 | > 插件编写我会另开专题讨论,欢迎大家关注我。
98 |
99 |
100 |
101 | ##### Vue3 Jsx支持
102 |
103 | `vue3`中`jsx`支持需要引入插件:`@vitejs/plugin-vue-jsx`
104 |
105 | ```bash
106 | $ npm i @vitejs/plugin-vue-jsx -D
107 | ```
108 |
109 | 注册插件,`vite.config.js`
110 |
111 | ```js
112 | import vueJsx from "@vitejs/plugin-vue-jsx";
113 |
114 | export default {
115 | plugins: [vue(), vueJsx()],
116 | }
117 | ```
118 |
119 | 用法也有要求,改造一下`App.vue`
120 |
121 | ```vue
122 |
123 |
138 | ```
139 |
140 |
141 |
142 | ##### Mock插件应用
143 |
144 | 之前给大家介绍的[vite-plugin-mock](https://github.com/vbenjs/vite-plugin-mock)已经重构支持了Vite2。
145 |
146 |
147 |
148 | 安装插件
149 |
150 | ```bash
151 | npm i mockjs -S
152 | ```
153 |
154 | ```bash
155 | npm i vite-plugin-mock cross-env -D
156 | ```
157 |
158 |
159 |
160 | 配置,`vite.config.js`
161 |
162 | ```js
163 | import { viteMockServe } from 'vite-plugin-mock'
164 |
165 | export default {
166 | plugins: [ viteMockServe({ supportTs: false }) ]
167 | }
168 | ```
169 |
170 |
171 |
172 | 设置环境变量,`package.json`
173 |
174 | ```json
175 | {
176 | "scripts": {
177 | "dev": "cross-env NODE_ENV=development vite",
178 | "build": "vite build"
179 | },
180 | }
181 | ```
182 |
183 |
184 |
185 |
186 |
187 | ### 项目基础架构
188 |
189 | #### 路由
190 |
191 | 安装`vue-router 4.x`
192 |
193 | ```js
194 | npm i vue-router@next -S
195 | ```
196 |
197 |
198 |
199 |
200 |
201 | 路由配置,`router/index.js`
202 |
203 | ```js
204 | import { createRouter, createWebHashHistory } from 'vue-router';
205 |
206 | const router = createRouter({
207 | history: createWebHashHistory(),
208 | routes: [
209 | { path: '/', component: () => import('views/home.vue') }
210 | ]
211 | });
212 |
213 | export default router
214 | ```
215 |
216 |
217 |
218 | 引入,`main.js`
219 |
220 | ```js
221 | import router from "@/router";
222 | createApp(App).use(router).mount("#app");
223 | ```
224 |
225 | > 别忘了创建`home.vue`并修改`App.vue`
226 | >
227 | > 路由用法略有变化,[村长的视频教程](https://www.bilibili.com/video/BV1Wh411X7Xp?p=19)
228 |
229 |
230 |
231 | #### 状态管理
232 |
233 | 安装`vuex 4.x`
234 |
235 | ```bash
236 | npm i vuex@next -S
237 | ```
238 |
239 |
240 |
241 |
242 |
243 | Store配置,`store/index.js`
244 |
245 | ```js
246 | import {createStore} from 'vuex';
247 |
248 | export default createStore({
249 | state: {
250 | couter: 0
251 | }
252 | });
253 | ```
254 |
255 |
256 |
257 | 引入,`main.js`
258 |
259 | ```js
260 | import store from "@/store";
261 | createApp(App).use(store).mount("#app");
262 | ```
263 |
264 | > 用法和以前基本一样,[村长的视频教程](https://www.bilibili.com/video/BV1Wh411X7Xp?p=23)
265 |
266 |
267 |
268 |
269 |
270 | #### 样式组织
271 |
272 | 安装sass
273 |
274 | ```bash
275 | npm i sass -D
276 | ```
277 |
278 |
279 |
280 | `styles`目录保存各种样式
281 |
282 | 
283 |
284 | `index.scss`作为出口组织这些样式,同时编写一些全局样式
285 |
286 | 
287 |
288 | 最后在`main.js`导入
289 |
290 | ```js
291 | import "styles/index.scss";
292 | ```
293 |
294 | > 注意在`vite.config.js`添加`styles`别名
295 |
296 |
297 |
298 | #### UI库
299 |
300 | 就用我们[花果山团队](https://www.yuque.com/hugsun)自家的[element3](https://github.com/hug-sun/element3)。
301 |
302 | > [中文文档](https://element3-ui.com/)
303 |
304 |
305 |
306 | 安装
307 |
308 | ```bash
309 | npm i element3 -S
310 | ```
311 |
312 |
313 |
314 | 完整引入,`main.js`
315 |
316 | ```js
317 | import element3 from "element3";
318 | import "element3/lib/theme-chalk/index.css";
319 |
320 | createApp(App).use(element3)
321 | ```
322 |
323 |
324 |
325 | 按需引入,`main.js`
326 |
327 | ```js
328 | import "element3/lib/theme-chalk/button.css";
329 | import { ElButton } from "element3"
330 | createApp(App).use(ElButton)
331 | ```
332 |
333 |
334 |
335 | 抽取成插件会更好,`plugins/element3.js`
336 |
337 | ```js
338 | // 完整引入
339 | import element3 from "element3";
340 | import "element3/lib/theme-chalk/index.css";
341 |
342 | // 按需引入
343 | // import { ElButton } from "element3";
344 | // import "element3/lib/theme-chalk/button.css";
345 |
346 | export default function (app) {
347 | // 完整引入
348 | app.use(element3)
349 |
350 | // 按需引入
351 | // app.use(ElButton);
352 | }
353 | ```
354 |
355 |
356 |
357 | 测试
358 |
359 | ```html
360 |