@mc-markets/ui 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/QUICK_FIX_STYLE.md +78 -0
- package/STYLE_IMPORT_GUIDE.md +368 -0
- package/TEST_RESOLVER.md +251 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -1
- package/packages/resolver.cjs +2 -2
- package/packages/resolver.js +2 -2
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# 🚀 样式问题快速修复
|
|
2
|
+
|
|
3
|
+
## 问题
|
|
4
|
+
组件正常工作,但样式没有加载。
|
|
5
|
+
|
|
6
|
+
## 快速解决方案(30秒)⚡
|
|
7
|
+
|
|
8
|
+
### 第一步:打开你的 `main.js` 文件
|
|
9
|
+
|
|
10
|
+
找到项目的入口文件(通常在 `src/main.js` 或 `src/main.ts`)
|
|
11
|
+
|
|
12
|
+
### 第二步:添加这一行代码
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
// src/main.js
|
|
16
|
+
import { createApp } from 'vue'
|
|
17
|
+
import App from './App.vue'
|
|
18
|
+
|
|
19
|
+
// ✅ 添加这一行
|
|
20
|
+
import '@mc-markets/ui/dist/style.css'
|
|
21
|
+
|
|
22
|
+
createApp(App).mount('#app')
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### 第三步:重启开发服务器
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# 按 Ctrl+C 停止
|
|
29
|
+
# 然后重新启动
|
|
30
|
+
npm run dev
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## ✅ 完成!
|
|
34
|
+
|
|
35
|
+
现在样式应该正常显示了。
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 为什么需要手动导入?
|
|
40
|
+
|
|
41
|
+
虽然 resolver 配置了 `importStyle: true`,但某些情况下 `sideEffects` 可能不生效。手动导入是最可靠的方式。
|
|
42
|
+
|
|
43
|
+
## 完整配置示例
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
// src/main.js
|
|
47
|
+
import { createApp } from 'vue'
|
|
48
|
+
import App from './App.vue'
|
|
49
|
+
import router from './router'
|
|
50
|
+
|
|
51
|
+
// Element Plus 样式(如果使用)
|
|
52
|
+
import 'element-plus/dist/index.css'
|
|
53
|
+
|
|
54
|
+
// @mc-markets/ui 样式 ⭐
|
|
55
|
+
import '@mc-markets/ui/dist/style.css'
|
|
56
|
+
|
|
57
|
+
const app = createApp(App)
|
|
58
|
+
app.use(router)
|
|
59
|
+
app.mount('#app')
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 配置建议
|
|
63
|
+
|
|
64
|
+
由于已经手动导入样式,可以在 `vite.config.js` 中关闭 resolver 的自动导入:
|
|
65
|
+
|
|
66
|
+
```js
|
|
67
|
+
// vite.config.js
|
|
68
|
+
Components({
|
|
69
|
+
resolvers: [
|
|
70
|
+
McMarketsUiResolver({
|
|
71
|
+
importStyle: false // ⬅️ 设为 false,避免重复导入
|
|
72
|
+
})
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
更多详细信息请查看 [STYLE_IMPORT_GUIDE.md](./STYLE_IMPORT_GUIDE.md)
|
|
78
|
+
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# 样式导入指南
|
|
2
|
+
|
|
3
|
+
如果使用 resolver 后组件正常显示但样式缺失,可以尝试以下几种解决方案。
|
|
4
|
+
|
|
5
|
+
## 方案 1:手动导入全局样式(推荐)⭐
|
|
6
|
+
|
|
7
|
+
在你的项目入口文件(如 `main.js` 或 `main.ts`)中手动导入样式:
|
|
8
|
+
|
|
9
|
+
### CSS 方式
|
|
10
|
+
```js
|
|
11
|
+
// main.js
|
|
12
|
+
import { createApp } from 'vue'
|
|
13
|
+
import App from './App.vue'
|
|
14
|
+
|
|
15
|
+
// 手动导入 @mc-markets/ui 样式
|
|
16
|
+
import '@mc-markets/ui/dist/style.css'
|
|
17
|
+
|
|
18
|
+
createApp(App).mount('#app')
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### SCSS 方式
|
|
22
|
+
```js
|
|
23
|
+
// main.js
|
|
24
|
+
import { createApp } from 'vue'
|
|
25
|
+
import App from './App.vue'
|
|
26
|
+
|
|
27
|
+
// 手动导入 @mc-markets/ui SCSS 样式
|
|
28
|
+
import '@mc-markets/ui/styles/index.scss'
|
|
29
|
+
|
|
30
|
+
createApp(App).mount('#app')
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
> **💡 提示**: 这是最可靠的方式,确保样式在应用启动时就被加载。
|
|
34
|
+
|
|
35
|
+
## 方案 2:通过 Vite 配置导入
|
|
36
|
+
|
|
37
|
+
在 `vite.config.js` 中配置:
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
import { defineConfig } from 'vite'
|
|
41
|
+
|
|
42
|
+
export default defineConfig({
|
|
43
|
+
css: {
|
|
44
|
+
preprocessorOptions: {
|
|
45
|
+
scss: {
|
|
46
|
+
// 如果使用 SCSS
|
|
47
|
+
additionalData: `@use "@mc-markets/ui/styles/index.scss" as *;`
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
或者在 CSS 中导入:
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
/* src/style.css 或 src/main.css */
|
|
58
|
+
@import '@mc-markets/ui/dist/style.css';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
然后在 `main.js` 中导入这个 CSS 文件:
|
|
62
|
+
|
|
63
|
+
```js
|
|
64
|
+
import './style.css'
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 方案 3:修改 Resolver 配置
|
|
68
|
+
|
|
69
|
+
确保 resolver 配置正确:
|
|
70
|
+
|
|
71
|
+
```js
|
|
72
|
+
// vite.config.js
|
|
73
|
+
import Components from 'unplugin-vue-components/vite'
|
|
74
|
+
import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
|
|
75
|
+
|
|
76
|
+
export default defineConfig({
|
|
77
|
+
plugins: [
|
|
78
|
+
Components({
|
|
79
|
+
resolvers: [
|
|
80
|
+
McMarketsUiResolver({
|
|
81
|
+
importStyle: true, // 确保为 true
|
|
82
|
+
styleType: 'css', // 'css' 或 'scss'
|
|
83
|
+
})
|
|
84
|
+
]
|
|
85
|
+
})
|
|
86
|
+
]
|
|
87
|
+
})
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
> **注意**: `sideEffects` 在某些版本的 unplugin-vue-components 中可能不完全支持。
|
|
91
|
+
|
|
92
|
+
## 方案 4:检查 unplugin-vue-components 版本
|
|
93
|
+
|
|
94
|
+
确保使用的是较新版本:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
npm list unplugin-vue-components
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
如果版本低于 0.24.0,建议升级:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm install -D unplugin-vue-components@latest
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 方案 5:单独导入样式到 HTML
|
|
107
|
+
|
|
108
|
+
在 `index.html` 中添加:
|
|
109
|
+
|
|
110
|
+
```html
|
|
111
|
+
<!DOCTYPE html>
|
|
112
|
+
<html lang="zh-CN">
|
|
113
|
+
<head>
|
|
114
|
+
<meta charset="UTF-8">
|
|
115
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
116
|
+
<title>Your App</title>
|
|
117
|
+
|
|
118
|
+
<!-- 方式 1: 如果已发布到 CDN -->
|
|
119
|
+
<!-- <link rel="stylesheet" href="https://cdn.example.com/@mc-markets/ui/dist/style.css"> -->
|
|
120
|
+
|
|
121
|
+
<!-- 方式 2: 通过 Vite 处理(推荐) -->
|
|
122
|
+
<link rel="stylesheet" href="/node_modules/@mc-markets/ui/dist/style.css">
|
|
123
|
+
</head>
|
|
124
|
+
<body>
|
|
125
|
+
<div id="app"></div>
|
|
126
|
+
<script type="module" src="/src/main.js"></script>
|
|
127
|
+
</body>
|
|
128
|
+
</html>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
> **注意**: 这种方式需要确保路径正确,在生产环境可能需要调整。
|
|
132
|
+
|
|
133
|
+
## 完整示例
|
|
134
|
+
|
|
135
|
+
### 项目结构
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
your-project/
|
|
139
|
+
├── src/
|
|
140
|
+
│ ├── main.js # 入口文件
|
|
141
|
+
│ ├── App.vue
|
|
142
|
+
│ └── views/
|
|
143
|
+
│ └── Home.vue
|
|
144
|
+
├── vite.config.js
|
|
145
|
+
└── package.json
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### main.js(推荐配置)
|
|
149
|
+
|
|
150
|
+
```js
|
|
151
|
+
import { createApp } from 'vue'
|
|
152
|
+
import App from './App.vue'
|
|
153
|
+
|
|
154
|
+
// ✅ 方法1:直接导入 CSS(最简单)
|
|
155
|
+
import '@mc-markets/ui/dist/style.css'
|
|
156
|
+
|
|
157
|
+
// ✅ 方法2:导入 SCSS(需要配置 SCSS 预处理器)
|
|
158
|
+
// import '@mc-markets/ui/styles/index.scss'
|
|
159
|
+
|
|
160
|
+
const app = createApp(App)
|
|
161
|
+
app.mount('#app')
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### vite.config.js
|
|
165
|
+
|
|
166
|
+
```js
|
|
167
|
+
import { defineConfig } from 'vite'
|
|
168
|
+
import vue from '@vitejs/plugin-vue'
|
|
169
|
+
import Components from 'unplugin-vue-components/vite'
|
|
170
|
+
import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
|
|
171
|
+
|
|
172
|
+
export default defineConfig({
|
|
173
|
+
plugins: [
|
|
174
|
+
vue(),
|
|
175
|
+
Components({
|
|
176
|
+
resolvers: [
|
|
177
|
+
McMarketsUiResolver({
|
|
178
|
+
importStyle: false, // ⚠️ 如果手动导入了样式,设为 false 避免重复
|
|
179
|
+
// importStyle: true, // 或者设为 true 尝试自动导入
|
|
180
|
+
})
|
|
181
|
+
],
|
|
182
|
+
dts: 'src/components.d.ts'
|
|
183
|
+
})
|
|
184
|
+
],
|
|
185
|
+
|
|
186
|
+
// 如果使用 SCSS
|
|
187
|
+
css: {
|
|
188
|
+
preprocessorOptions: {
|
|
189
|
+
scss: {
|
|
190
|
+
additionalData: `@use "sass:math";`
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### App.vue 或其他组件
|
|
198
|
+
|
|
199
|
+
```vue
|
|
200
|
+
<template>
|
|
201
|
+
<div class="app">
|
|
202
|
+
<h1>测试 @mc-markets/ui</h1>
|
|
203
|
+
|
|
204
|
+
<!-- 直接使用,无需导入 -->
|
|
205
|
+
<m-button type="primary">主要按钮</m-button>
|
|
206
|
+
<m-button type="success">成功按钮</m-button>
|
|
207
|
+
|
|
208
|
+
<m-input v-model="value" placeholder="请输入" />
|
|
209
|
+
|
|
210
|
+
<m-select v-model="selected">
|
|
211
|
+
<m-option label="选项1" value="1" />
|
|
212
|
+
<m-option label="选项2" value="2" />
|
|
213
|
+
</m-select>
|
|
214
|
+
</div>
|
|
215
|
+
</template>
|
|
216
|
+
|
|
217
|
+
<script setup>
|
|
218
|
+
import { ref } from 'vue'
|
|
219
|
+
// 注意:组件不需要手动导入
|
|
220
|
+
|
|
221
|
+
const value = ref('')
|
|
222
|
+
const selected = ref('')
|
|
223
|
+
</script>
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 样式优先级问题
|
|
227
|
+
|
|
228
|
+
如果样式导入了但效果不对,可能是优先级问题。可以尝试:
|
|
229
|
+
|
|
230
|
+
### 1. 调整导入顺序
|
|
231
|
+
|
|
232
|
+
```js
|
|
233
|
+
// main.js
|
|
234
|
+
import 'element-plus/dist/index.css' // Element Plus 样式在前
|
|
235
|
+
import '@mc-markets/ui/dist/style.css' // 自定义样式在后(优先级更高)
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### 2. 使用 !important(不推荐)
|
|
239
|
+
|
|
240
|
+
```css
|
|
241
|
+
/* 在你的全局样式中 */
|
|
242
|
+
.m-button {
|
|
243
|
+
/* 你的自定义样式 */
|
|
244
|
+
background-color: #409eff !important;
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### 3. 增加选择器权重
|
|
249
|
+
|
|
250
|
+
```vue
|
|
251
|
+
<style scoped>
|
|
252
|
+
/* 增加选择器层级 */
|
|
253
|
+
.app .m-button {
|
|
254
|
+
/* 你的自定义样式 */
|
|
255
|
+
}
|
|
256
|
+
</style>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## 调试技巧
|
|
260
|
+
|
|
261
|
+
### 检查样式是否加载
|
|
262
|
+
|
|
263
|
+
打开浏览器开发者工具:
|
|
264
|
+
|
|
265
|
+
1. **Network 标签页**:查找 `style.css`,确认是否被加载
|
|
266
|
+
2. **Elements 标签页**:检查 `<head>` 中是否有样式标签
|
|
267
|
+
3. **Console 标签页**:查看是否有样式加载错误
|
|
268
|
+
|
|
269
|
+
### 查看生成的代码
|
|
270
|
+
|
|
271
|
+
检查浏览器中实际加载的代码:
|
|
272
|
+
|
|
273
|
+
```js
|
|
274
|
+
// 在浏览器 Console 中运行
|
|
275
|
+
document.querySelectorAll('style, link[rel="stylesheet"]').forEach(el => {
|
|
276
|
+
console.log(el.outerHTML || el.textContent.substring(0, 100))
|
|
277
|
+
})
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
## 常见问题
|
|
281
|
+
|
|
282
|
+
### Q1: 样式完全没加载
|
|
283
|
+
|
|
284
|
+
**解决方法**:
|
|
285
|
+
1. 在 `main.js` 中手动导入 `import '@mc-markets/ui/dist/style.css'`
|
|
286
|
+
2. 重启开发服务器
|
|
287
|
+
3. 清除浏览器缓存
|
|
288
|
+
|
|
289
|
+
### Q2: 部分样式不生效
|
|
290
|
+
|
|
291
|
+
**解决方法**:
|
|
292
|
+
1. 检查是否有 CSS 优先级冲突
|
|
293
|
+
2. 确保没有被其他样式覆盖
|
|
294
|
+
3. 使用浏览器开发者工具检查实际应用的样式
|
|
295
|
+
|
|
296
|
+
### Q3: SCSS 导入报错
|
|
297
|
+
|
|
298
|
+
**解决方法**:
|
|
299
|
+
```bash
|
|
300
|
+
# 确保安装了 sass
|
|
301
|
+
npm install -D sass
|
|
302
|
+
|
|
303
|
+
# 然后在 main.js 中导入
|
|
304
|
+
import '@mc-markets/ui/styles/index.scss'
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Q4: 生产环境样式丢失
|
|
308
|
+
|
|
309
|
+
**解决方法**:
|
|
310
|
+
1. 确保在 `main.js` 中导入样式
|
|
311
|
+
2. 检查 `vite.config.js` 的 build 配置
|
|
312
|
+
3. 确认 `package.json` 中 `files` 字段包含样式文件
|
|
313
|
+
|
|
314
|
+
## 推荐方案总结
|
|
315
|
+
|
|
316
|
+
### 🌟 最佳实践(推荐)
|
|
317
|
+
|
|
318
|
+
```js
|
|
319
|
+
// main.js
|
|
320
|
+
import { createApp } from 'vue'
|
|
321
|
+
import App from './App.vue'
|
|
322
|
+
|
|
323
|
+
// 1. 手动导入样式(最可靠)
|
|
324
|
+
import '@mc-markets/ui/dist/style.css'
|
|
325
|
+
|
|
326
|
+
// 2. 如果使用 Element Plus,确保顺序正确
|
|
327
|
+
// import 'element-plus/dist/index.css'
|
|
328
|
+
// import '@mc-markets/ui/dist/style.css'
|
|
329
|
+
|
|
330
|
+
const app = createApp(App)
|
|
331
|
+
app.mount('#app')
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
```js
|
|
335
|
+
// vite.config.js
|
|
336
|
+
import { defineConfig } from 'vite'
|
|
337
|
+
import vue from '@vitejs/plugin-vue'
|
|
338
|
+
import Components from 'unplugin-vue-components/vite'
|
|
339
|
+
import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
|
|
340
|
+
|
|
341
|
+
export default defineConfig({
|
|
342
|
+
plugins: [
|
|
343
|
+
vue(),
|
|
344
|
+
Components({
|
|
345
|
+
resolvers: [
|
|
346
|
+
McMarketsUiResolver({
|
|
347
|
+
importStyle: false // 手动导入了,这里设为 false
|
|
348
|
+
})
|
|
349
|
+
]
|
|
350
|
+
})
|
|
351
|
+
]
|
|
352
|
+
})
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
这样可以确保:
|
|
356
|
+
- ✅ 样式一定会被加载
|
|
357
|
+
- ✅ 开发和生产环境一致
|
|
358
|
+
- ✅ 样式加载时机可控
|
|
359
|
+
- ✅ 避免重复导入
|
|
360
|
+
|
|
361
|
+
## 需要帮助?
|
|
362
|
+
|
|
363
|
+
如果以上方法都不行,请检查:
|
|
364
|
+
1. `@mc-markets/ui` 版本(应该是 1.1.2 或更高)
|
|
365
|
+
2. 浏览器控制台是否有错误
|
|
366
|
+
3. Network 标签页中样式文件的加载情况
|
|
367
|
+
4. 尝试清除 `node_modules/.vite` 缓存后重启
|
|
368
|
+
|
package/TEST_RESOLVER.md
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# 测试 Resolver 是否工作
|
|
2
|
+
|
|
3
|
+
## 快速测试步骤
|
|
4
|
+
|
|
5
|
+
### 1. 在你的项目中创建测试页面
|
|
6
|
+
|
|
7
|
+
在 `src/views` 或 `src/pages` 目录下创建 `TestMcUi.vue`:
|
|
8
|
+
|
|
9
|
+
```vue
|
|
10
|
+
<template>
|
|
11
|
+
<div class="test-mc-ui">
|
|
12
|
+
<h1>测试 @mc-markets/ui Resolver</h1>
|
|
13
|
+
|
|
14
|
+
<!-- 使用 M 开头的组件 -->
|
|
15
|
+
<div class="test-section">
|
|
16
|
+
<h2>按钮测试</h2>
|
|
17
|
+
<m-button type="primary">主要按钮</m-button>
|
|
18
|
+
<m-button type="success">成功按钮</m-button>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div class="test-section">
|
|
22
|
+
<h2>输入框测试</h2>
|
|
23
|
+
<m-input v-model="inputValue" placeholder="测试输入" />
|
|
24
|
+
<p>值: {{ inputValue }}</p>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="test-section">
|
|
28
|
+
<h2>选择器测试</h2>
|
|
29
|
+
<m-select v-model="selectValue" placeholder="请选择">
|
|
30
|
+
<m-option label="选项1" value="1" />
|
|
31
|
+
<m-option label="选项2" value="2" />
|
|
32
|
+
</m-select>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<div class="test-section">
|
|
36
|
+
<h2>表单测试</h2>
|
|
37
|
+
<m-form>
|
|
38
|
+
<m-form-item label="用户名">
|
|
39
|
+
<m-input v-model="username" />
|
|
40
|
+
</m-form-item>
|
|
41
|
+
</m-form>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<script setup>
|
|
47
|
+
import { ref } from 'vue'
|
|
48
|
+
|
|
49
|
+
// 注意:不需要手动导入组件,resolver 会自动处理
|
|
50
|
+
// import { MButton, MInput } from '@mc-markets/ui'
|
|
51
|
+
|
|
52
|
+
const inputValue = ref('')
|
|
53
|
+
const selectValue = ref('')
|
|
54
|
+
const username = ref('')
|
|
55
|
+
</script>
|
|
56
|
+
|
|
57
|
+
<style scoped>
|
|
58
|
+
.test-mc-ui {
|
|
59
|
+
padding: 20px;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.test-section {
|
|
63
|
+
margin-bottom: 30px;
|
|
64
|
+
padding: 20px;
|
|
65
|
+
border: 1px solid #ddd;
|
|
66
|
+
border-radius: 4px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.test-section h2 {
|
|
70
|
+
margin-top: 0;
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 2. 访问测试页面
|
|
76
|
+
|
|
77
|
+
访问这个页面后,重新检查 `components.d.ts` 文件,应该会看到类似这样的内容:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
declare module 'vue' {
|
|
81
|
+
export interface GlobalComponents {
|
|
82
|
+
// ... 其他组件
|
|
83
|
+
MButton: typeof import('@mc-markets/ui')['MButton']
|
|
84
|
+
MInput: typeof import('@mc-markets/ui')['MInput']
|
|
85
|
+
MSelect: typeof import('@mc-markets/ui')['MSelect']
|
|
86
|
+
MOption: typeof import('@mc-markets/ui')['MOption']
|
|
87
|
+
MForm: typeof import('@mc-markets/ui')['MForm']
|
|
88
|
+
MFormItem: typeof import('@mc-markets/ui')['MFormItem']
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 3. 验证自动导入
|
|
94
|
+
|
|
95
|
+
如果看到上面的类型定义,说明 resolver 工作正常!你应该能够:
|
|
96
|
+
|
|
97
|
+
✅ 在模板中直接使用 `<m-button>`、`<m-input>` 等组件
|
|
98
|
+
✅ 无需手动 import
|
|
99
|
+
✅ 组件样式自动加载
|
|
100
|
+
✅ TypeScript 类型提示正常
|
|
101
|
+
|
|
102
|
+
### 4. 检查配置
|
|
103
|
+
|
|
104
|
+
如果没有生成类型定义,请检查你的 `vite.config.js`:
|
|
105
|
+
|
|
106
|
+
```js
|
|
107
|
+
import Components from 'unplugin-vue-components/vite'
|
|
108
|
+
import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
|
|
109
|
+
|
|
110
|
+
export default {
|
|
111
|
+
plugins: [
|
|
112
|
+
Components({
|
|
113
|
+
resolvers: [
|
|
114
|
+
McMarketsUiResolver({
|
|
115
|
+
importStyle: true,
|
|
116
|
+
styleType: 'css'
|
|
117
|
+
})
|
|
118
|
+
],
|
|
119
|
+
// 确保 dts 路径正确
|
|
120
|
+
dts: 'src/components.d.ts'
|
|
121
|
+
})
|
|
122
|
+
]
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 5. 常见问题排查
|
|
127
|
+
|
|
128
|
+
#### 问题:组件没有被识别
|
|
129
|
+
|
|
130
|
+
**解决方法**:
|
|
131
|
+
1. 确保组件名称使用 `M` 开头(大写)
|
|
132
|
+
2. 重启开发服务器 `npm run dev`
|
|
133
|
+
3. 删除 `node_modules/.vite` 缓存
|
|
134
|
+
|
|
135
|
+
#### 问题:类型定义没有生成
|
|
136
|
+
|
|
137
|
+
**解决方法**:
|
|
138
|
+
1. 检查 `dts` 配置路径是否正确
|
|
139
|
+
2. 确保 `unplugin-vue-components` 版本 >= 0.24.0
|
|
140
|
+
3. 查看控制台是否有错误信息
|
|
141
|
+
|
|
142
|
+
#### 问题:样式没有加载
|
|
143
|
+
|
|
144
|
+
**解决方法**:
|
|
145
|
+
```js
|
|
146
|
+
// 手动导入样式
|
|
147
|
+
import '@mc-markets/ui/dist/style'
|
|
148
|
+
|
|
149
|
+
// 或者在 vite.config.js 中配置
|
|
150
|
+
McMarketsUiResolver({
|
|
151
|
+
importStyle: true,
|
|
152
|
+
styleType: 'css' // 或 'scss'
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 6. 查看构建结果
|
|
157
|
+
|
|
158
|
+
构建项目查看是否按需加载:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npm run build
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
检查 `dist` 目录,只有使用的组件会被打包进去。
|
|
165
|
+
|
|
166
|
+
## 直接测试 Resolver
|
|
167
|
+
|
|
168
|
+
你也可以直接测试 resolver 函数:
|
|
169
|
+
|
|
170
|
+
```js
|
|
171
|
+
// test-resolver.js
|
|
172
|
+
import { McMarketsUiResolver } from '@mc-markets/ui/resolver'
|
|
173
|
+
|
|
174
|
+
const resolver = McMarketsUiResolver({
|
|
175
|
+
importStyle: true,
|
|
176
|
+
styleType: 'css'
|
|
177
|
+
})
|
|
178
|
+
|
|
179
|
+
// 测试不同组件
|
|
180
|
+
console.log('MButton:', resolver.resolve('MButton'))
|
|
181
|
+
console.log('MInput:', resolver.resolve('MInput'))
|
|
182
|
+
console.log('MTable:', resolver.resolve('MTable'))
|
|
183
|
+
console.log('ElButton:', resolver.resolve('ElButton')) // 应该返回 undefined
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
运行:
|
|
187
|
+
```bash
|
|
188
|
+
node test-resolver.js
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
预期输出:
|
|
192
|
+
```js
|
|
193
|
+
MButton: {
|
|
194
|
+
name: 'MButton',
|
|
195
|
+
from: '@mc-markets/ui',
|
|
196
|
+
sideEffects: '@mc-markets/ui/dist/style'
|
|
197
|
+
}
|
|
198
|
+
MInput: {
|
|
199
|
+
name: 'MInput',
|
|
200
|
+
from: '@mc-markets/ui',
|
|
201
|
+
sideEffects: '@mc-markets/ui/dist/style'
|
|
202
|
+
}
|
|
203
|
+
// ...
|
|
204
|
+
ElButton: undefined
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## 支持的所有组件
|
|
208
|
+
|
|
209
|
+
确保以下组件名称都是 **M 开头**(而不是 m 开头):
|
|
210
|
+
|
|
211
|
+
- `MIcon`
|
|
212
|
+
- `MButton`
|
|
213
|
+
- `MInput`
|
|
214
|
+
- `MForm`
|
|
215
|
+
- `MFormItem`
|
|
216
|
+
- `MTooltip`
|
|
217
|
+
- `MSelect`
|
|
218
|
+
- `MOption`
|
|
219
|
+
- `MOptionGroup`
|
|
220
|
+
- `MPagination`
|
|
221
|
+
- `MRadio`
|
|
222
|
+
- `MRadioGroup`
|
|
223
|
+
- `MRadioButton`
|
|
224
|
+
- `MSwitch`
|
|
225
|
+
- `MTag`
|
|
226
|
+
- `MAlert`
|
|
227
|
+
- `MDialog`
|
|
228
|
+
- `MNotification`
|
|
229
|
+
- `MMessage`
|
|
230
|
+
- `MNotifiMessage`
|
|
231
|
+
- `MDatePicker`
|
|
232
|
+
- `MEmpty`
|
|
233
|
+
- `MTable`
|
|
234
|
+
- `MTableColumn`
|
|
235
|
+
- `MBanner`
|
|
236
|
+
- `MTabs`
|
|
237
|
+
- `MTabPane`
|
|
238
|
+
- `MTabCard`
|
|
239
|
+
- `MTabCardItem`
|
|
240
|
+
- `MBreadcrumb`
|
|
241
|
+
|
|
242
|
+
## 注意事项
|
|
243
|
+
|
|
244
|
+
⚠️ **重要**:组件名称必须使用 PascalCase(大驼峰)格式:
|
|
245
|
+
- ✅ 正确:`<MButton>` 或 `<m-button>` (在模板中会自动转换)
|
|
246
|
+
- ✅ 正确:`<MFormItem>` 或 `<m-form-item>`
|
|
247
|
+
- ❌ 错误:`<mButton>`
|
|
248
|
+
- ❌ 错误:`<mbutton>`
|
|
249
|
+
|
|
250
|
+
在 Vue 模板中,`<m-button>` 会被自动转换为 `MButton` 组件名。
|
|
251
|
+
|