如何为*.php文件在Prettier中同时使用多种解析器?
解决Prettier同时格式化PHP文件中PHP与HTML内容的问题
方案1:用专门的社区插件处理
直接使用prettier-plugin-php-html插件,它就是为解决这个场景开发的,能同时识别PHP文件里的PHP代码和HTML内容,分别套用对应规则格式化:
- 安装插件:
npm install --save-dev prettier-plugin-php-html - 修改你的Prettier配置文件(比如
.prettierrc),启用插件并指定解析器:
配置完成后,直接运行Prettier就能同时格式化PHP和HTML部分了。{ "plugins": ["@prettier/plugin-php", "prettier-plugin-php-html"], "overrides": [ { "files": "*.php", "options": { "parser": "php-html" } } ] }
方案2:写脚本分两次格式化
如果不想额外装插件,可以自己写个简单脚本,分两步处理:先用PHP解析器处理PHP代码,再用HTML解析器处理HTML内容:
- 确保已经装了
prettier和@prettier/plugin-php - 创建
format-php.js脚本文件:const prettier = require('prettier'); const fs = require('fs'); const path = require('path'); // 遍历指定目录下的所有PHP文件 function formatPhpFiles(dir) { const files = fs.readdirSync(dir); files.forEach(file => { const fullPath = path.join(dir, file); if (fs.statSync(fullPath).isDirectory()) { formatPhpFiles(fullPath); } else if (path.extname(fullPath) === '.php') { let content = fs.readFileSync(fullPath, 'utf8'); // 第一步:用PHP解析器格式化 content = prettier.format(content, { parser: 'php', plugins: ['@prettier/plugin-php'] }); // 第二步:用HTML解析器格式化 content = prettier.format(content, { parser: 'html' }); fs.writeFileSync(fullPath, content, 'utf8'); console.log(`已格式化:${fullPath}`); } }); } // 替换成你的项目目录路径 formatPhpFiles('./src'); - 在
package.json里加个运行脚本:{ "scripts": { "format:php": "node format-php.js" } } - 执行命令运行脚本:
npm run format:php
小提醒
- 方案1的插件是社区维护的,要注意和你当前用的
@prettier/plugin-php版本是否兼容 - 方案2的两次格式化可能会有缩进之类的小冲突,需要调整Prettier的配置项来统一风格
内容的提问来源于stack exchange,提问作者MauriceNino
相关产品推荐
相关产品推荐

