Prettier 配置文件 .prettierrc.js 和 .prettierrc.json 的区别

.prettierrc.js 和 .prettierrc.json的区别

.prettierrc.js 和 .prettierrc.json 都是 Prettier 的配置文件,主要区别在于格式和灵活性。


1. .prettierrc.json(JSON 格式)

json

复制代码
{
  "printWidth": 80,
  "tabWidth": 2,
  "useTabs": false,
  "semi": true
}
  • 优点:

    • 语法严格,不易出错

    • 可被其他工具轻松解析

    • 支持 JSON Schema 验证

  • 缺点:

    • 不支持注释

    • 不能使用动态配置


2. .prettierrc.js(JavaScript 格式)

javascript

复制代码
module.exports = {
  printWidth: 80,
  tabWidth: 2,
  useTabs: false,
  semi: true,
  // 可以添加注释
  overrides: [
    {
      files: "*.md",
      options: {
        printWidth: 60
      }
    }
  ]
}
  • 优点:

    • ✅ 支持注释,方便解释配置

    • ✅ 支持动态配置(条件逻辑、函数等)

    • ✅ 支持 ES modules (export default)

    • ✅ 可以引用环境变量或其他配置

  • 缺点:

    • 需要 Node.js 环境来解析

    • 可能执行恶意代码(安全性考虑)


主要差异对比

特性 .prettierrc.json .prettierrc.js
注释 ❌ 不支持 ✅ 支持
动态配置 ❌ 不支持 ✅ 支持
环境变量 ❌ 不支持 ✅ 支持
条件逻辑 ❌ 不支持 ✅ 支持
导入其他配置 ❌ 不支持 ✅ 支持
工具兼容性 ✅ 更好 ❌ 需要 Node.js
安全性 ✅ 更安全 ❌ 可能执行代码

使用场景建议

选择 .prettierrc.json 当:

  • 配置简单,不需要注释

  • 希望配置文件能被多种工具读取

  • 注重安全性和稳定性

  • 项目不依赖 Node.js 环境


选择 .prettierrc.js 当:

  • 配置复杂,需要注释说明

  • 需要条件配置(不同环境不同格式)

  • 需要动态生成配置

  • 想继承或合并其他配置

  • 项目本身就是 Node.js 项目


示例:.prettierrc.js 的高级用法

javascript

复制代码
// 根据环境变量调整配置
const isProduction = process.env.NODE_ENV === 'production';

module.exports = {
  printWidth: isProduction ? 80 : 100,
  
  // 根据文件类型覆盖配置
  overrides: [
    {
      files: '*.test.js',
      options: {
        printWidth: 120
      }
    }
  ],
  
  // 从其他文件导入配置
  ...require('./shared-prettier-config'),
  
  // 使用函数生成配置
  trailingComma: (() => {
    // 复杂的逻辑判断
    return 'es5';
  })()
};

其他格式选项

Prettier 还支持:

  • .prettierrc.yaml / .prettierrc.yml - YAML 格式,支持注释

  • prettier.config.js - 另一种 JS 配置文件名

  • package.json 中的 prettier 字段


总结推荐

  • 大多数项目:.prettierrc.json(简单直观)

  • 复杂项目/团队项目:.prettierrc.js(注释和灵活性更重要)

  • 个人项目:按喜好选择,JS 格式更灵活

相关推荐
星栈7 小时前
pnpm 12 升级实测
前端·javascript
Ai-_Man8 小时前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
Bruce_Liuxiaowei11 小时前
网页版 DeepSeek “harness desktop“ WebGL 上下文创建失败排查实录
开发语言·javascript·webgl
小凯在掘金12 小时前
为什么箭头函数不能作为构造函数?
前端·javascript
可乐鸡翅yeah_12 小时前
网页端 M3U8 播放器性能监控,怎么看播放卡顿指标
javascript·ffmpeg·音视频·safari·m3u8
可乐鸡翅yeah_12 小时前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
2603_9658966212 小时前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
JustHappy13 小时前
「vConsole MCP🛠️」我让 AI 直接看见任何 H5 的日志和请求帮你 debug
前端·javascript·程序员
xieter14 小时前
【技术精选】Node.js 核心事件循环机制与异步 I/O 深度剖析 (2026-10-02)
前端·javascript
想吃火锅100515 小时前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode