1
- 文件内容:笔记(包含 vue3、ts、vite等相关内容 )
1
+ 文件内容:笔记(包含 vue3、ts、vite 等相关内容 )
2
2
3
3
# Vue 3 + TypeScript + Vite
4
4
@@ -17,8 +17,7 @@ Since TypeScript cannot handle type information for `.vue` imports, they are shi
17
17
18
18
You can learn more about Take Over mode [ here] ( https://github.com/johnsoncodehk/volar/discussions/471 ) .
19
19
20
-
21
- 一、单文件组件 ` <script setup> `
20
+ ## 一、单文件组件 ` <script setup> `
22
21
23
22
` <script setup> ` 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。相比于普通的 ` <script> ` 语法,它具有更多优势:
24
23
@@ -27,3 +26,89 @@ You can learn more about Take Over mode [here](https://github.com/johnsoncodehk/
27
26
- 更好的运行时性能 (其模板会被编译成与其同一作用域的渲染函数,没有任何的中间代理)。
28
27
- 更好的 IDE 类型推断性能 (减少语言服务器从代码中抽离类型的工作)。
29
28
29
+ ## 二、UI 框架引入的三种方式利弊分析总结
30
+
31
+ - 1、全局完整注册
32
+
33
+ ```
34
+ import Antd from 'ant-design-vue';
35
+ import 'ant-design-vue/dist/antd.css';
36
+ ```
37
+
38
+ 以上代码便完成了 Antd 的全局注册。需要注意的是,样式文件需要单独引入。
39
+
40
+ - 2、全局部分注册
41
+
42
+ ```
43
+ import { Button, message } from 'ant-design-vue';
44
+ /* 会自动注册 Button 下的子组件, 例如 Button.Group */
45
+ app.use(Button).mount('#app');
46
+ app.config.globalProperties.$message = message;
47
+ ```
48
+
49
+ - 3、局部注册组件
50
+ 【重要说明】 此种方式需要分别注册组件子组件,如 Button、ButtonGroup,并且注册后仅在当前组件中有效。所以我们推荐使用上述两种方式。
51
+
52
+ ```
53
+ <template>
54
+ <a-button>Add</a-button>
55
+ </template>
56
+ <script>
57
+ import { Button } from 'ant-design-vue';
58
+ const ButtonGroup = Button.Group;
59
+
60
+ export default {
61
+ components: {
62
+ AButton: Button,
63
+ AButtonGroup: ButtonGroup,
64
+ },
65
+ };
66
+ </script>
67
+ ```
68
+
69
+ ## 三、按需加载
70
+
71
+ 如果你仅需要加载使用的组件,可以通过以下的写法来按需加载组件。
72
+
73
+ ```
74
+ import Button from 'ant-design-vue/lib/button';
75
+ import 'ant-design-vue/lib/button/style'; // 或者 ant-design-vue/lib/button/style/css 加载 css 文件
76
+ ```
77
+
78
+ 如果你使用了 babel,那么可以使用 ` babel-plugin-import ` 来进行按需加载,加入这个插件后。你可以仍然这么写:
79
+
80
+ ```
81
+ import { Button } from 'ant-design-vue';
82
+ ```
83
+
84
+ 插件会帮你转换成 ant-design-vue/lib/xxx 的写法。另外此插件配合 style 属性可以做到模块样式的按需自动加载。
85
+
86
+ > 注意,babel-plugin-import 的 style 属性除了引入对应组件的样式,也会引入一些必要的全局样式。如果你不需要它们,建议不要使用此属性。你可以 import 'ant-design-vue/dist/antd.css 手动引入,并覆盖全局样式。
87
+
88
+ 【总结:】既然这样的话,那不管是全量引入还是按需加载,样式文件干脆直接 ` import 'ant-design-vue/dist/antd.css ` 手动全量引入全局样式。
89
+
90
+ 如果你使用的 Vite,你可以使用 ` unplugin-vue-components ` 来进行按需加载。但是此插件无法处理非组件模块,如 message,这种组件需要手动加载:
91
+
92
+ ```
93
+ import { message } from 'ant-design-vue';
94
+ import 'ant-design-vue/es/message/style/css'; //vite只能用 ant-design-vue/es 而非 ant-design-vue/lib
95
+ ```
96
+
97
+ 什么是 ` Vite ` 的按需加载?就是在 ` vite.config.js ` 中进行配置,配了以后,你就可以直接使用 ` antd-vue ` 里面的组件了,` vite ` 会自动知道你引入了哪些组件,但就像上面所说的,无法处理非组件模块。
98
+
99
+ ```
100
+ // vite.config.js
101
+ import Components from 'unplugin-vue-components/vite';
102
+ import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers';
103
+
104
+ export default {
105
+ plugins: [
106
+ /* ... */
107
+ Components({
108
+ resolvers: [AntDesignVueResolver()],
109
+ }),
110
+ ],
111
+ };
112
+ ```
113
+
114
+ 【总结:】如果确实想要使用按需加载的话,借助 ` babel-plugin-import ` 是一个很好的方案吧,但还是那句话,样式还是全量引入吧。
0 commit comments