如何用Prettier配置转换assets/js下所有子目录的JS文件?
解决Prettier无法递归格式化JS子目录文件的问题
嘿,我来帮你搞定这个Prettier递归格式化的问题!你遇到的情况其实很常见,问题出在shell对glob模式(也就是你用的**)的解析方式上。
核心原因
默认情况下,像bash这类shell并不会自动把**解析成递归匹配所有子目录,它只会匹配当前目录下的内容。这就导致你的命令只能处理js目录直接下的文件,而碰不到子目录里的文件。
快速解决方案
这里有几个靠谱的办法,按推荐程度排序:
用引号包裹glob表达式,让Prettier自己处理递归
把你的命令改成这样:prettier --config .prettierrc --write './resources/assets/js/**/*.js'加引号的作用是阻止shell提前解析glob模式,把递归匹配的任务交给Prettier处理。另外加上
/*.js能确保只匹配JS文件,避免误格式化其他类型文件。开启shell的globstar选项(针对bash/zsh)
如果你不想用引号,可以先在终端里执行这条命令打开globstar:shopt -s globstar之后再运行你原来的命令,
**就会正确递归匹配所有子目录了。不过这个设置是临时的,关闭终端就会失效,要是想永久生效,可以把这条命令添加到你的~/.bashrc或~/.zshrc文件里。明确指定递归路径
也可以直接把当前目录和子目录的JS文件都列出来:prettier --config .prettierrc --write ./resources/assets/js/ ./resources/assets/js/**/*.js不过这个写法不如第一种简洁,还是优先推荐第一种方案。
额外检查点
如果试了上面的方法还是不行,可以做这两个检查:
- 确认你的Prettier是较新版本,旧版本对glob的支持可能有bug;
- 检查你的
.prettierrc配置里有没有用ignorePatterns排除子目录的规则。
内容的提问来源于stack exchange,提问作者Andrew Kordampalos
相关产品推荐
相关产品推荐

