Skip to content
On this page

最常用的配置项

js
// .prettierrc.cjs
module.exports = {
  semi: false, // 默认 true
  printWidth: 100, // 行宽 默认 80
  singleQuote: true, // 字符串使用单引号 默认为 false
  arrowParens: 'avoid', // 箭头函数只有一个参数时,是否给括号 js:avoid ts : always
  bracketSameLine: false, // jsx 开头标签的 > 和 < 是否在同一行
  jsxSingleQuote: true, // 在 jsx 中使用单引号
  embeddedLanguageFormatting: 'auto',
}

prettier 的配置文件有多种,webStorm 编辑器只支持 .prettierrc.*,为了团队协作中使用 webStorm 的队友也能使用 prettier 进行格式化,建议使用 .prettierrc.* 作为配置文件。

在提交之前格式化有改动的文件

使用 lint-stagedsimple-git-hooks 进行提交前的代码检查和格式化。

bash
pnpm i -D lint-staged simple-git-hooks

package.json 中添加以下配置:

json
{
  "scripts": {
    "postinstall": "npx simple-git-hooks"
  },
  "lint-staged": {
    "*.{js,jsx,ts,tsx,json,css,scss,less,html}": ["prettier --write"]
  },
  "simple-git-hooks": {
    "pre-commit": "npx lint-staged"
  }
}

pretty-quick 也能起到类似 lint-staged + simple-git-hooks 的作用,但 lint-staged 更加灵活,支持多种文件类型的格式化。

修改 simple-git-hooks 配置后,都要执行 npx simple-git-hooks 命令,才能生效。

依赖分组

prettier 插件'@trivago/prettier-plugin-sort-imports' 能按照依赖距离进行分组,使用时需要安装以下依赖:

bash
pnpm i -D @trivago/prettier-plugin-sort-imports

配置:

js
module.exports = {
  importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'],
  plugins: ['@trivago/prettier-plugin-sort-imports'],
  // 排序规则
  importOrder: [
    // 外部依赖 从 node_modules 加载的依赖
    // NOTE vue 依赖必须放在第一位 否则 main.ts 中 报错
    '^vue',
    '<THIRD_PARTY_MODULES>',
    '^@/(.*)$',
    '^#c/(.*)$',
    '^../(.*)',
    '^./((?!scss).)*$',
    '^./(.*)',
    '^[./]',
  ],
  importOrderSeparation: true,
  importOrderSortSpecifiers: true,
}

以便阅读代码时不关注第三方依赖,比如 vue 的依赖。

分组后,会改变依赖导入的顺序,若依赖导入顺序很关键,比如 vue 项目的 main 文件,通常 vue 的依赖必须在第一个导入,建议把 main加入 .prettierignore 文件。

加入到 .prettierignore 文件后,可能还是会被 prettier 排序,此时在文件顶部添加以下注释:

js
// sort-imports-ignore
import { createApp } from 'vue'
import { createPinia } from 'pinia'

import Antd from 'ant-design-vue'
import ElementPlus from 'element-plus'

// 顺序重要
// 选择器特异性相同,后引入的样式会覆盖前面的
import 'ant-design-vue/dist/reset.css'
import 'element-plus/dist/index.css'
import 'ol-popup/dist/ol-popup.css'
import 'ol/ol.css'
import './assets/base.css'
import './assets/main.css'
import './assets/ol-popup.scss'

import router from './router'
//import App from './AppBefore.vue'
import App from './App.vue'

const app = createApp(App)
app.use(createPinia()).use(ElementPlus)
app.use(Antd)
app.use(router)
app.mount('#app')

不再进行排序。

Released under the MIT License.