@mc-markets/ui 1.1.1 → 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/RESOLVER_USAGE.md +29 -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 +6 -2
- package/packages/resolver.cjs +138 -0
- 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
|
+
|
package/RESOLVER_USAGE.md
CHANGED
|
@@ -17,6 +17,8 @@ npm install -D unplugin-vue-components
|
|
|
17
17
|
|
|
18
18
|
### Vite 配置
|
|
19
19
|
|
|
20
|
+
#### ES 模块方式(推荐)
|
|
21
|
+
|
|
20
22
|
在你的 `vite.config.js` 或 `vite.config.ts` 中:
|
|
21
23
|
|
|
22
24
|
```js
|
|
@@ -41,6 +43,33 @@ export default defineConfig({
|
|
|
41
43
|
})
|
|
42
44
|
```
|
|
43
45
|
|
|
46
|
+
#### CommonJS 方式
|
|
47
|
+
|
|
48
|
+
如果你的配置文件使用 CommonJS 格式:
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
const { defineConfig } = require('vite')
|
|
52
|
+
const vue = require('@vitejs/plugin-vue')
|
|
53
|
+
const Components = require('unplugin-vue-components/vite')
|
|
54
|
+
const { McMarketsUiResolver } = require('@mc-markets/ui/resolver')
|
|
55
|
+
|
|
56
|
+
module.exports = defineConfig({
|
|
57
|
+
plugins: [
|
|
58
|
+
vue(),
|
|
59
|
+
Components({
|
|
60
|
+
resolvers: [
|
|
61
|
+
McMarketsUiResolver({
|
|
62
|
+
importStyle: true,
|
|
63
|
+
styleType: 'css'
|
|
64
|
+
})
|
|
65
|
+
]
|
|
66
|
+
})
|
|
67
|
+
]
|
|
68
|
+
})
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
> **💡 提示**: Resolver 自动支持 ES 模块和 CommonJS 两种格式,无需额外配置。
|
|
72
|
+
|
|
44
73
|
### Webpack 配置
|
|
45
74
|
|
|
46
75
|
在你的 `webpack.config.js` 中:
|
|
@@ -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
|
+
|