my-code-style 1.8.5 → 1.8.6
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/CHANGELOG.md +6 -0
- package/README.md +16 -16
- package/bin/init +67 -38
- package/package.json +1 -1
- package/src/stylelint/index.cjs +14 -1
- package/src/stylelint/less.cjs +7 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
## 变更日志
|
|
2
2
|
|
|
3
|
+
## [1.8.6](https://github.com/myvn/codeStyle/compare/v1.8.5...v1.8.6) (2026-09-22)
|
|
4
|
+
|
|
5
|
+
### 🐛 Bug Fixes | Bug 修复
|
|
6
|
+
|
|
7
|
+
- 下游升级实测三缺陷——stylelint×prettier 内联互搏、release 脚本纠偏、stale versionrc 清理 ([7fa54f6](https://github.com/myvn/codeStyle/commit/7fa54f67aebc4497a9ce0f612758bd84d64ca550))
|
|
8
|
+
|
|
3
9
|
## [1.8.5](https://github.com/myvn/codeStyle/compare/v1.8.4...v1.8.5) (2026-09-22)
|
|
4
10
|
|
|
5
11
|
### 🐛 Bug Fixes | Bug 修复
|
package/README.md
CHANGED
|
@@ -214,7 +214,7 @@ npx my-code-style-init [--dry-run] [--backup] [--version|-v] [--help|-h]
|
|
|
214
214
|
- **现代化 Git Hooks**:采用 Husky 9 原生极简 hook + lint-staged 互斥文件分组,串行运行、消除并发写入缓存冲突
|
|
215
215
|
- **Stylelint SCSS、Less 及混合工程双支持**:支持纯 SCSS、纯 Less 以及两者共存的混合工程,放行 `@` 变量、小程序 `rpx`/`page`、深度选择器 `::v-deep` 及现代 CSS 伪类,组件内嵌多预处理器样式全面检查
|
|
216
216
|
- **严格暂存区 Scope 猜测**:`guessCurrentScope()` 严格只依据 Git 暂存区推断 scope,支持多目录频次投票、重命名、物理删除、中文路径与空格路径
|
|
217
|
-
- **ESM 兼容的自动版本发布**:支持 CommonJS(`.versionrc.js`)与 ESM(`.versionrc.cjs`)工程无缝对接 commit-and-tag-version(standard-version 的社区维护分支),一键版本递增与 CHANGELOG
|
|
217
|
+
- **ESM 兼容的自动版本发布**:支持 CommonJS(`.versionrc.js`)与 ESM(`.versionrc.cjs`)工程无缝对接 commit-and-tag-version(standard-version 的社区维护分支),一键版本递增与 CHANGELOG 生成。peer 范围有意钉在 `^12`:13.x 的 writer 存在回归且要求搭配新 preset 组合,稳定性待观察后再放宽(旧项目遗留的 `release: standard-version` 会在 init 时被自动纠偏)
|
|
218
218
|
|
|
219
219
|
## 常见问题(使用中遇到的问题)
|
|
220
220
|
|
|
@@ -240,12 +240,12 @@ npx my-code-style-init [--dry-run] [--backup] [--version|-v] [--help|-h]
|
|
|
240
240
|
## 测试套件
|
|
241
241
|
|
|
242
242
|
```bash
|
|
243
|
-
npm run test:all # 全量运行
|
|
243
|
+
npm run test:all # 全量运行 189 项:用例明细 + 分类统计 + 最慢文件定位
|
|
244
244
|
npm run diagnose # 换机器后先跑它:进程 / git / 文件系统 / hooks 各占多少
|
|
245
245
|
npm run sweep # 给本机找最佳文件级并发(扫 integration 套件)
|
|
246
|
-
npm test # 只跑基础 CLI 与配置矩阵(
|
|
246
|
+
npm test # 只跑基础 CLI 与配置矩阵(88 项)
|
|
247
247
|
npm run test:integration:setup # 安装现代化隔离依赖运行环境
|
|
248
|
-
npm run test:integration # Flat Config、真实 Husky 及提交链路测试(
|
|
248
|
+
npm run test:integration # Flat Config、真实 Husky 及提交链路测试(65 项)
|
|
249
249
|
npm run test:legacy:setup # 安装 ESLint 8 隔离运行环境
|
|
250
250
|
npm run test:legacy # ESLint 8.57.0 兼容性回归测试(27 项)
|
|
251
251
|
npm run test:stylelint17:setup # 安装 Stylelint 17 隔离运行环境
|
|
@@ -258,20 +258,20 @@ npm run test:stylelint17 # Stylelint 17 生态兼容性回归(8 项)
|
|
|
258
258
|
```text
|
|
259
259
|
my-code-style 测试套件
|
|
260
260
|
|
|
261
|
-
▶ [1/4] 基础 CLI 与配置矩阵 (共
|
|
261
|
+
▶ [1/4] 基础 CLI 与配置矩阵 (共 88 项,5 文件 · 3 文件并发(自动:2 核 / 内存 4G))
|
|
262
262
|
✓ 运行器 TAP 解析:统计通过与失败、SKIP 与每用例耗时 · 7ms
|
|
263
263
|
✓ cz 交互提示为中文,且可选类型与 type-enum 一一对应 · 1ms
|
|
264
264
|
✓ peer 范围覆盖我们声明支持的上游大版本(校准防回退,BUG-027) · 0ms
|
|
265
265
|
✓ 一键安装命令对含 || 的版本范围加引号,可整段粘贴执行 · 40ms
|
|
266
266
|
✓ 初始化结尾指引把 cz 用法说清楚(先 git add + 指到 README 手册) · 80ms
|
|
267
267
|
…
|
|
268
|
-
✓ 通过
|
|
268
|
+
✓ 通过 88 · 3.6s · 最慢文件 init-matrix.test.cjs 3.4s
|
|
269
269
|
|
|
270
|
-
▶ [2/4] 现代工具链与提交链 (共
|
|
270
|
+
▶ [2/4] 现代工具链与提交链 (共 65 项,24 文件 · 3 文件并发(自动:2 核 / 内存 4G))
|
|
271
271
|
✓ 完整提交链:JS/TS/Vue/nvue/CSS/less 自动修复及二次复检 · 10.4s
|
|
272
272
|
✓ 发布防呆:HEAD 已有 v* tag 时拦截(此时 release 工具会静默抬版并写出空 CHANGELOG) · 609ms
|
|
273
273
|
…
|
|
274
|
-
✓ 通过
|
|
274
|
+
✓ 通过 65 · 45.3s · 最慢文件 commit-chain-both.test.cjs 12.4s
|
|
275
275
|
|
|
276
276
|
▶ [3/4] ESLint 8 兼容性 (共 27 项,1 文件 · 3 文件并发(自动:2 核 / 内存 4G))
|
|
277
277
|
✓ 独立运行 ESLint 8 支持下限而非 ESLint 9 · 1ms
|
|
@@ -279,26 +279,26 @@ npm run test:stylelint17 # Stylelint 17 生态兼容性回归(8 项)
|
|
|
279
279
|
…
|
|
280
280
|
✓ 通过 27 · 18.3s
|
|
281
281
|
|
|
282
|
-
▶ [4/4] Stylelint 17 兼容性 (共
|
|
282
|
+
▶ [4/4] Stylelint 17 兼容性 (共 9 项,1 文件 · 3 文件并发(自动:2 核 / 内存 4G))
|
|
283
283
|
✓ 隔离环境装的是 stylelint 17(不是 16) · 2ms
|
|
284
284
|
✓ 生成的 .stylelintrc.cjs 在 stylelint 17 下可加载并放过正常 SCSS · 700ms
|
|
285
285
|
…
|
|
286
|
-
✓ 通过
|
|
286
|
+
✓ 通过 9 · 8.2s
|
|
287
287
|
|
|
288
288
|
──────────────────────────────────────────────────────
|
|
289
289
|
套件 通过 失败 跳过 用时
|
|
290
290
|
──────────────────────────────────────────────────────
|
|
291
|
-
基础 CLI 与配置矩阵
|
|
292
|
-
现代工具链与提交链
|
|
291
|
+
基础 CLI 与配置矩阵 88 0 - 3.6s
|
|
292
|
+
现代工具链与提交链 65 0 - 45.3s
|
|
293
293
|
ESLint 8 兼容性 27 0 - 18.7s
|
|
294
|
-
Stylelint 17 兼容性
|
|
294
|
+
Stylelint 17 兼容性 9 0 - 8.2s
|
|
295
295
|
──────────────────────────────────────────────────────
|
|
296
|
-
合计
|
|
296
|
+
合计 189 0 - 76.9s
|
|
297
297
|
──────────────────────────────────────────────────────
|
|
298
298
|
|
|
299
299
|
⏱ 最慢文件:eslint8.test.cjs 18.0s · commit-chain-less.test.cjs 11.4s · commit-chain-both.test.cjs 11.3s
|
|
300
300
|
|
|
301
|
-
✅ 全部通过:
|
|
301
|
+
✅ 全部通过:189/189 项,用时 76.9s
|
|
302
302
|
```
|
|
303
303
|
|
|
304
304
|
终端里每个套件下方还有一条实时进度条(`██████░░░░ 38/66 失败 0 4.0s`)。附加参数:
|
|
@@ -376,7 +376,7 @@ npm run test:all -- --profile # 看每个测试文件耗时,定位瓶颈
|
|
|
376
376
|
| `npm run test:integration`(运行器调度,自动并发 3) | 30.6s(只看集成套件那一段) |
|
|
377
377
|
| 串行套件 + 文件级并发 23(全部一波) | ✗ 3.8G 内存沙箱被 OOM 压垮(19 项 SIGKILL) |
|
|
378
378
|
|
|
379
|
-
同机复测(
|
|
379
|
+
同机复测(189 项,同一台 2 核沙箱连续跑;绝对秒数随机器负载波动,相对关系稳定):串行套件 + 文件级并发 1 = 84.4s、默认自动并发 3 = 76.9s、`npm run test:integration` = 45.3s(其余口径为早前基线实测,相对关系稳定)。
|
|
380
380
|
|
|
381
381
|
(2 核沙箱里并行收益被 CPU 争抢吃掉大半,`--concurrency=1` 时单个文件只要 0.7–4.2s;
|
|
382
382
|
16 核机器上集成套件那段 ≈ 最慢子文件,即"一次真实提交"的量级。)
|
package/bin/init
CHANGED
|
@@ -1031,6 +1031,25 @@ function main() {
|
|
|
1031
1031
|
backedUpCount++
|
|
1032
1032
|
}
|
|
1033
1033
|
}
|
|
1034
|
+
// 与本次生成的 .versionrc.cjs 抢生效顺序的同名旧配置(.versionrc /
|
|
1035
|
+
// .versionrc.json 会直接压过生成物,ESM 项目的 .versionrc.js 徒增歧义):
|
|
1036
|
+
// 备份后移除,不留"哪份在生效"的悬案(下游升级实测 D2)
|
|
1037
|
+
const staleVersionrcFiles = [
|
|
1038
|
+
...staleVersionrcTop,
|
|
1039
|
+
...(staleVersionrc ? [".versionrc.js"] : []),
|
|
1040
|
+
]
|
|
1041
|
+
for (const relPath of staleVersionrcFiles) {
|
|
1042
|
+
if (!fileExists(relPath)) continue
|
|
1043
|
+
const staleSrc = path.resolve(PROJECT_ROOT, relPath)
|
|
1044
|
+
const staleTarget = path.resolve(backupDir, relPath)
|
|
1045
|
+
ensureDir(path.dirname(staleTarget))
|
|
1046
|
+
fs.copyFileSync(staleSrc, staleTarget)
|
|
1047
|
+
fs.rmSync(staleSrc)
|
|
1048
|
+
backedUpCount++
|
|
1049
|
+
console.log(
|
|
1050
|
+
` · 旧 ${relPath} 已备份到 .my-code-style-backup/ 并移除(由 ${versionrcPath} 接管)`,
|
|
1051
|
+
)
|
|
1052
|
+
}
|
|
1034
1053
|
}
|
|
1035
1054
|
|
|
1036
1055
|
// ESLint 8 directory traversal defaults to .js; explicitly include typed
|
|
@@ -1182,6 +1201,16 @@ function modifyPackageJson(updates) {
|
|
|
1182
1201
|
// Merge scripts: updates won't overwrite existing scripts with the same key
|
|
1183
1202
|
if (updates.scripts) {
|
|
1184
1203
|
pkg.scripts = { ...updates.scripts, ...(pkg.scripts || {}) }
|
|
1204
|
+
// 唯一纠偏例外:standard-version 已停止维护且从未是我们的 peer,旧项目
|
|
1205
|
+
// 遗留的 release: standard-version 会让 pnpm release 必然 command not
|
|
1206
|
+
// found(下游 1.2 → 1.8.5 升级实测)。其余自定义脚本仍尊重不覆盖。
|
|
1207
|
+
if (
|
|
1208
|
+
typeof pkg.scripts.release === "string" &&
|
|
1209
|
+
pkg.scripts.release.includes("standard-version")
|
|
1210
|
+
) {
|
|
1211
|
+
pkg.scripts.release = updates.scripts.release
|
|
1212
|
+
console.log(" ✓ release 脚本已从 standard-version 纠偏为 commit-and-tag-version")
|
|
1213
|
+
}
|
|
1185
1214
|
}
|
|
1186
1215
|
|
|
1187
1216
|
// Set lint-staged (replace existing lint-staged to avoid stale/duplicate patterns)
|
|
@@ -1349,79 +1378,79 @@ const PEER_SOURCE_TARGETS = [
|
|
|
1349
1378
|
* stylelint ^17),以及 typescript-eslint 与其 parser/plugin 的版本错位。
|
|
1350
1379
|
*/
|
|
1351
1380
|
function checkInstalledVersions({ peerDeps, allPeerDeps, rootDir = PROJECT_ROOT }) {
|
|
1352
|
-
const problems = []
|
|
1353
|
-
const seen = new Set()
|
|
1381
|
+
const problems = []
|
|
1382
|
+
const seen = new Set()
|
|
1354
1383
|
const add = (name, message, target) => {
|
|
1355
|
-
const key = `${name}\u0000${message}
|
|
1356
|
-
if (seen.has(key)) return
|
|
1357
|
-
seen.add(key)
|
|
1358
|
-
problems.push({ name, message, target })
|
|
1359
|
-
}
|
|
1360
|
-
const minorOf = (version) => String(version).split(".").slice(0, 2).join(".")
|
|
1384
|
+
const key = `${name}\u0000${message}`
|
|
1385
|
+
if (seen.has(key)) return
|
|
1386
|
+
seen.add(key)
|
|
1387
|
+
problems.push({ name, message, target })
|
|
1388
|
+
}
|
|
1389
|
+
const minorOf = (version) => String(version).split(".").slice(0, 2).join(".")
|
|
1361
1390
|
|
|
1362
1391
|
// 1) 本工具的 peer 范围 vs 实际安装
|
|
1363
1392
|
for (const dep of allPeerDeps) {
|
|
1364
|
-
const range = dep === "eslint" ? peerDeps.eslint : peerDeps[dep]
|
|
1365
|
-
if (!range || range === "*" || range.startsWith("npm:")) continue
|
|
1366
|
-
const installed = findInstalledPackage(dep, rootDir)
|
|
1367
|
-
if (!installed) continue
|
|
1368
|
-
const allowed = satisfiesRange(range, installed.version)
|
|
1369
|
-
if (allowed === null || allowed) continue
|
|
1370
|
-
add(dep, `${dep} 装了 ${installed.version},本工具要求 ${range}`, `${dep}@${range}`)
|
|
1393
|
+
const range = dep === "eslint" ? peerDeps.eslint : peerDeps[dep]
|
|
1394
|
+
if (!range || range === "*" || range.startsWith("npm:")) continue
|
|
1395
|
+
const installed = findInstalledPackage(dep, rootDir)
|
|
1396
|
+
if (!installed) continue
|
|
1397
|
+
const allowed = satisfiesRange(range, installed.version)
|
|
1398
|
+
if (allowed === null || allowed) continue
|
|
1399
|
+
add(dep, `${dep} 装了 ${installed.version},本工具要求 ${range}`, `${dep}@${range}`)
|
|
1371
1400
|
}
|
|
1372
1401
|
|
|
1373
1402
|
// 2) 上游配置包的 peer vs 实际安装(配置文件本身也会挑底层版本)
|
|
1374
1403
|
for (const dep of PEER_SOURCE_PACKAGES) {
|
|
1375
|
-
const source = findInstalledPackage(dep, rootDir)
|
|
1376
|
-
if (!source) continue
|
|
1404
|
+
const source = findInstalledPackage(dep, rootDir)
|
|
1405
|
+
if (!source) continue
|
|
1377
1406
|
for (const [target, range] of Object.entries(source.manifest.peerDependencies || {})) {
|
|
1378
|
-
if (!PEER_SOURCE_TARGETS.includes(target)) continue
|
|
1379
|
-
if (range === "*" || String(range).startsWith("npm:")) continue
|
|
1380
|
-
const installed = findInstalledPackage(target, rootDir)
|
|
1407
|
+
if (!PEER_SOURCE_TARGETS.includes(target)) continue
|
|
1408
|
+
if (range === "*" || String(range).startsWith("npm:")) continue
|
|
1409
|
+
const installed = findInstalledPackage(target, rootDir)
|
|
1381
1410
|
if (!installed) {
|
|
1382
|
-
if (!rangeIntervals(range).length) continue
|
|
1411
|
+
if (!rangeIntervals(range).length) continue
|
|
1383
1412
|
add(
|
|
1384
1413
|
target,
|
|
1385
1414
|
`${dep}@${source.version} 需要 ${target}@${range},项目里没有安装`,
|
|
1386
1415
|
`${target}@${range}`,
|
|
1387
|
-
)
|
|
1388
|
-
continue
|
|
1416
|
+
)
|
|
1417
|
+
continue
|
|
1389
1418
|
}
|
|
1390
|
-
const allowed = satisfiesRange(range, installed.version)
|
|
1391
|
-
if (allowed === null || allowed) continue
|
|
1419
|
+
const allowed = satisfiesRange(range, installed.version)
|
|
1420
|
+
if (allowed === null || allowed) continue
|
|
1392
1421
|
add(
|
|
1393
1422
|
target,
|
|
1394
1423
|
`${dep}@${source.version} 要求 ${target}@${range},实际装了 ${installed.version}`,
|
|
1395
1424
|
`${target}@${range}`,
|
|
1396
|
-
)
|
|
1425
|
+
)
|
|
1397
1426
|
}
|
|
1398
1427
|
}
|
|
1399
1428
|
|
|
1400
1429
|
// 3) typescript-eslint 与 @typescript-eslint/parser、eslint-plugin 必须同版本
|
|
1401
|
-
const meta = findInstalledPackage("typescript-eslint", rootDir)
|
|
1430
|
+
const meta = findInstalledPackage("typescript-eslint", rootDir)
|
|
1402
1431
|
if (meta) {
|
|
1403
1432
|
for (const sibling of ["@typescript-eslint/parser", "@typescript-eslint/eslint-plugin"]) {
|
|
1404
|
-
const installed = findInstalledPackage(sibling, rootDir)
|
|
1405
|
-
if (!installed) continue
|
|
1406
|
-
if (minorOf(installed.version) === minorOf(meta.version)) continue
|
|
1433
|
+
const installed = findInstalledPackage(sibling, rootDir)
|
|
1434
|
+
if (!installed) continue
|
|
1435
|
+
if (minorOf(installed.version) === minorOf(meta.version)) continue
|
|
1407
1436
|
add(
|
|
1408
1437
|
sibling,
|
|
1409
1438
|
`${sibling}@${installed.version} 与 typescript-eslint@${meta.version} 不是同一版本`,
|
|
1410
1439
|
`${sibling}@${meta.version}`,
|
|
1411
|
-
)
|
|
1440
|
+
)
|
|
1412
1441
|
}
|
|
1413
1442
|
}
|
|
1414
1443
|
|
|
1415
1444
|
if (!problems.length) return 0
|
|
1416
|
-
console.log("")
|
|
1417
|
-
warn(`以下依赖已安装,但版本与当前配置不匹配(${problems.length} 个):`)
|
|
1418
|
-
for (const problem of problems) console.log(` · ${problem.message}`)
|
|
1419
|
-
console.log("")
|
|
1420
|
-
warn("对齐命令(可整段粘贴执行;也可以把上游配置包降到匹配的大版本):")
|
|
1421
|
-
const targets = [...new Set(problems.map((problem) => problem.target))]
|
|
1445
|
+
console.log("")
|
|
1446
|
+
warn(`以下依赖已安装,但版本与当前配置不匹配(${problems.length} 个):`)
|
|
1447
|
+
for (const problem of problems) console.log(` · ${problem.message}`)
|
|
1448
|
+
console.log("")
|
|
1449
|
+
warn("对齐命令(可整段粘贴执行;也可以把上游配置包降到匹配的大版本):")
|
|
1450
|
+
const targets = [...new Set(problems.map((problem) => problem.target))]
|
|
1422
1451
|
console.log(
|
|
1423
1452
|
` ${addDevCommand(detectPackageManager())} ${targets.map(shellSafeSpec).join(" ")}`,
|
|
1424
|
-
)
|
|
1453
|
+
)
|
|
1425
1454
|
return problems.length
|
|
1426
1455
|
}
|
|
1427
1456
|
|
package/package.json
CHANGED
package/src/stylelint/index.cjs
CHANGED
|
@@ -6,7 +6,6 @@ module.exports = {
|
|
|
6
6
|
"stylelint-config-recommended-scss",
|
|
7
7
|
"stylelint-config-recommended-vue/scss",
|
|
8
8
|
"stylelint-config-html/vue",
|
|
9
|
-
"stylelint-config-recess-order",
|
|
10
9
|
],
|
|
11
10
|
plugins: ["stylelint-prettier"],
|
|
12
11
|
ignoreFiles: [
|
|
@@ -21,14 +20,28 @@ module.exports = {
|
|
|
21
20
|
{
|
|
22
21
|
files: ["**/*.{vue,nvue,html}"],
|
|
23
22
|
customSyntax: "postcss-html",
|
|
23
|
+
// 内联 style="..." 属性同时被 prettier(经 eslint-plugin-prettier 以 vue
|
|
24
|
+
// 解析器处理整份 SFC)格式化;stylelint 侧任何声明级 fixer(recess-order
|
|
25
|
+
// 重排、stylelint-prettier)对同一批内联属性都有独立主张,且 postcss-html
|
|
26
|
+
// 把属性内容 round-trip 时会有损(实测产生前导空格、丢失分号后空格),
|
|
27
|
+
// 两边对"正确形态"永远谈不拢——lint-staged 链 stylelint 最后执行,提交
|
|
28
|
+
// 产物永远 prettier-red,门禁无法收敛(下游 1.8.5 升级实测,BUG-031)。
|
|
29
|
+
// 因此 vue/html 交给 prettier 全权格式化:这里既关 stylelint-prettier,
|
|
30
|
+
// 也不启用 recess-order;<style> 块的格式化由 prettier CLI / eslint
|
|
31
|
+
// --fix 承担,stylelint 只保留下面 rules 里的语义规则。
|
|
32
|
+
rules: { "prettier/prettier": null },
|
|
24
33
|
},
|
|
25
34
|
{
|
|
26
35
|
files: ["**/*.{css,scss}"],
|
|
27
36
|
customSyntax: "postcss-scss",
|
|
37
|
+
// recess-order 只在纯样式文件生效(extends 在 lint 时惰性解析,
|
|
38
|
+
// 配置本体保持无 peer 可加载);vue/html 的内联属性不参与排序
|
|
39
|
+
extends: ["stylelint-config-recess-order"],
|
|
28
40
|
},
|
|
29
41
|
{
|
|
30
42
|
files: ["**/*.less"],
|
|
31
43
|
customSyntax: "postcss-less",
|
|
44
|
+
extends: ["stylelint-config-recess-order"],
|
|
32
45
|
},
|
|
33
46
|
],
|
|
34
47
|
rules: {
|
package/src/stylelint/less.cjs
CHANGED
|
@@ -5,7 +5,6 @@ module.exports = {
|
|
|
5
5
|
"stylelint-config-recommended",
|
|
6
6
|
"stylelint-config-recommended-vue",
|
|
7
7
|
"stylelint-config-html/vue",
|
|
8
|
-
"stylelint-config-recess-order",
|
|
9
8
|
],
|
|
10
9
|
plugins: ["stylelint-prettier"],
|
|
11
10
|
ignoreFiles: [
|
|
@@ -20,10 +19,17 @@ module.exports = {
|
|
|
20
19
|
{
|
|
21
20
|
files: ["**/*.{vue,nvue,html}"],
|
|
22
21
|
customSyntax: "postcss-html",
|
|
22
|
+
// 与统一入口(index.cjs)同理:内联 style="..." 属性归 prettier 管,
|
|
23
|
+
// stylelint 侧的声明级 fixer(recess-order / stylelint-prettier)对它
|
|
24
|
+
// 的改写经 postcss-html round-trip 会有损且与 prettier 主张冲突,
|
|
25
|
+
// lint-staged 链尾的 stylelint --fix 会把提交产物改成 prettier-red
|
|
26
|
+
// 形态(BUG-031)。vue/html 只保留语义规则。
|
|
27
|
+
rules: { "prettier/prettier": null },
|
|
23
28
|
},
|
|
24
29
|
{
|
|
25
30
|
files: ["**/*.less"],
|
|
26
31
|
customSyntax: "postcss-less",
|
|
32
|
+
extends: ["stylelint-config-recess-order"],
|
|
27
33
|
},
|
|
28
34
|
],
|
|
29
35
|
rules: {
|