用 Prettier glob 模式的 5 个真实场景:从“手动扒文件”到“一键躺平”

57 阅读6分钟

用 Prettier glob 模式的 5 个真实场景:从“手动扒文件”到“一键躺平”

lengyan.png

大家好,我是[冷烟]~今天想和大家聊个前端人都懂的“扎心小事”:

上次团队迭代,我要给所有 JS/TS 文件统一格式化,结果对着编辑器点了半小时“格式化选中文件”,最后还漏了 src/utils 下的三个工具函数。直到后来用了 Prettier 的 glob 模式,才发现——原来格式化文件能这么轻松,咖啡没凉就搞定了!

这篇文章会结合 5 个开发者天天碰到的真实需求,把 Prettier glob 模式的用法讲透,每个场景都附“抄作业级”命令,新手也能直接用。学会之后,格式化文件再也不用“加班加点”~

本文亮点

  • 5 个真实业务场景(老项目格式化、模块隔离、CI 检测等),覆盖 90% 格式化需求;
  • 每段命令都带参数解释+避坑指南,不用猜“这行代码是干嘛的”;
  • 最后附 glob 模式“偷懒口诀”,30 秒记住核心用法。

场景 1:刚接手老项目,给所有代码“洗个澡”

老项目最头疼的就是格式混乱:有的用单引号,有的用双引号,缩进一会儿 2 空格、一会儿 4 空格——像出租屋没收拾前的样子,看着闹心。

这时候不用逐个文件改,用 ** 通配符“一锅端”,让 Prettier 做次“深度清洁”:

# 格式化当前目录及所有子目录下的「所有支持文件」(JS/TS/Vue/React 等)
npx prettier "**/*" --write --ignore-unknown

关键细节解释

  • **/*:glob 模式的“递归通配符”,表示“当前目录下所有文件+所有子目录里的文件”,相当于“全屋大扫除”;
  • --write:让 Prettier 直接修改文件(如果只想看哪些文件要改,把 --write 换成 --check 即可);
  • --ignore-unknown:老项目里常有 .log.json 这类 Prettier 不认识的文件,加这个参数能跳过它们,避免报错(相当于“只打扫该打扫的房间”)。

场景 2:只格式化“自己的模块”,不碰别人的代码

你负责 user 模块(用户登录、个人中心等),改完代码想格式化,但怕不小心动了同事负责的 order 模块文件——这时候 glob 模式就是“精准手术刀”,只切你要的部分。

比如只格式化 src/user 下的 JS/TS 文件:

# 只格式化 src/user 目录及子目录下的 .js 和 .ts 文件
npx prettier "src/user/**/*.{js,ts}" --write

进阶用法:同时格式化多个模块

如果还负责 src/components/Button 组件,直接用 {} 打包路径即可:

# 同时格式化 user 模块 + Button 组件下的 JS/TS 文件
npx prettier "src/{user,components/Button}/**/*.{js,ts}" --write

关键细节解释

  • {js,ts}:glob 模式的“多选语法”,表示“同时选中 .js 和 .ts 后缀的文件”,相当于“点外卖时选两种口味”;
  • src/{user,components/Button}:表示“同时选中 src 下的 user 目录和 components/Button 目录”,路径之间用逗号分隔,不用额外加空格。

场景 3:CI 检测“新增代码”,别让格式问题卡流水线

公司 CI 流水线有个规矩:代码提交前必须格式化,不然流水线直接报错。但总有人忘格式化,每次都等 CI 跑失败了才回头改,浪费时间。

这时候用 --list-different 配合 glob 模式,让 CI 精准找出“没格式化的文件”,还能直接输出文件名,方便定位问题:

# 检测 src 目录下所有 JS/TS 文件是否格式化,输出未格式化的文件名
npx prettier "src/**/*.{js,ts}" --list-different

为什么不用 --check

  • --check 只会提示“有文件未格式化”,但不告诉你具体是哪个;
  • --list-different 会直接输出未格式化的文件名(比如 src/utils/format.js),方便后续脚本处理(比如发消息提醒提交者“你的这个文件没格式化!”);
  • 关键优势:如果检测到未格式化文件,命令会返回 exit code 1,CI 流水线会自动拦截,避免不合格代码合并。

场景 4:格式化“配置文件”,但别碰 node_modules

有时候需要格式化项目根目录的配置文件(比如 package.json.eslintrc.js),还有 docs 目录下的文档,但绝对不能碰 node_modules——毕竟里面的文件是“第三方依赖”,改了容易出问题。

用 glob 模式精准选中目标文件即可,Prettier 默认会忽略 node_modules,不用额外配置:

# 格式化根目录配置文件 + docs 目录下所有 md 文档
npx prettier "{package.json,.eslintrc.js,docs/**/*.md}" --write

避坑提醒

  • 如果偏要格式化 node_modules 里的文件(极不推荐!),可以加 --with-node-modules 参数,但出了问题别来找我~
  • 根目录文件路径要写全(比如 .eslintrc.js 前面的.不能漏),不然 Prettier 找不到文件。

场景 5:处理“带括号的目录”,别被特殊符号坑了

项目里有个目录叫 [feature-v2](括号用来标注版本),你想格式化里面的文件,结果写 [feature-v2]/**/*.js 发现没反应——这是因为 glob 模式里的 [] 是“特殊符号”(用来表示字符范围,比如 [a-z]),得先“转义”才能用。

正确做法是用 [[]] 把目录名包起来,告诉 Prettier:“这是目录名,不是特殊符号!”:

# 格式化 [feature-v2] 目录下的所有 JS 文件
npx prettier "[[feature-v2]]/**/*.js" --write

跨平台避坑

  • Windows 系统别用 \ 转义(比如 \[feature-v2\]),容易出问题,认准 [[]] 准没错;
  • macOS/Linux 系统虽然支持 \ 转义,但推荐统一用 [[]],保持命令跨平台兼容。

glob 模式“偷懒口诀”(30 秒记住)

  1. 要递归,用 **:比如 src/**/*.js,表示“src 下所有子目录的 JS 文件”;
  2. 选多个,用 {}:比如 {js,ts,md} 选多种后缀,{user,order} 选多个目录;
  3. 特殊名,用 [[]]:比如 [[feature-v2]],处理带括号的目录/文件名;
  4. 必加引号!必加引号!必加引号!:重要的事说三遍,不然 Windows 系统会解析错误(比如把 {js,ts} 当成命令行参数)。

最后

glob 模式的核心不是“炫技”,而是“用最少的代码,选最多的目标”——就像点外卖时用“全选”按钮一样,与其手动扒文件,不如花 5 分钟学会这几个场景,以后格式化文件就能“躺平”。

如果这篇文章帮你省了时间,欢迎点赞+收藏~也可以在评论区说说你遇到的“格式化坑”,咱们一起避坑!

标签:#Prettier #前端工程化 #glob模式 #前端工具 #代码规范