Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub

记得我们在git中有个命令是 npm run link吗 走的就是packjson 中的这个

在packjson 中增加

  "scripts: {
    ...
     "lint": "lint-staged"
  }

在项目根目录下新建 lint-staged.config.js

module.exports = {
  '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
  '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': [
    'prettier --write--parser json',
  ],
  'package.json': ['prettier --write'],
  '*.{css,scss,less,styl}': ['stylelint --fix', 'prettier --write'],
  '*.md': ['prettier --write'],
};

代码格式化和质量工具 为了设定一个标准,供项目的所有贡献者使用,以保持代码风格一致并遵循基本的最佳实践,我们将使用两个工具:

eslint - 代码规范的最佳实践 prettier - 自动格式化代码文件

ESLint

我们从 ESLint 开始,它非常简单因为在我们创建 Next.js 项目的时候已经自动安装好并且有了默认配置。 我们仅需要添加少部分额外的配置就可以让它比默认配置更加严格。如果你不同意其中的任何一条规则配置,不用担心,我们可以非常简单的手动关闭这些规则。我们将所有的 ESLint 配置都写在 .eslintrc.json 文件中,这个文件已经存在于我们项目的根目录。

.eslintrc.json


{
  "globals": {
    "React": "readonly"
  },
  "settings": {
    "react": {
      "version": "detect"
    }
  },
  "root": true,
  "env": {
    "browser": true,
    "node": true,
    "es6": true
  },
  /* 指定如何解析语法 */
  "parser": "@typescript-eslint/parser",
  /* 优先级低于 parse 的语法解析配置 */
  "parserOptions": {
    "ecmaVersion": 2020,
    "sourceType": "module",
    "jsxPragma": "React",
    "ecmaFeatures": {
      "jsx": true
    }
  },
  "plugins": ["react", "@typescript-eslint", "react-hooks", "prettier"],
  /*
   * "off" 或 0    ==>  关闭规则
   * "warn" 或 1   ==>  打开的规则作为警告(不影响代码执行)
   * "error" 或 2  ==>  规则作为一个错误(代码不能执行,界面报错)
   */
  "rules": {
    // eslint (http://eslint.cn/docs/rules)
    "no-var": "error", // 要求使用 let 或 const 而不是 var
    "no-multiple-empty-lines": ["error", { "max": 1 }], // 不允许多个空行
    "no-use-before-define": "error", // 禁止在 函数/类/变量 定义之前使用它们
    "prefer-const": "error", // 此规则旨在标记使用 let 关键字声明但在初始分配后从未重新分配的变量,要求使用 const
    "no-irregular-whitespace": "error", // 禁止不规则的空白

    // typeScript (https://typescript-eslint.io/rules)
    "@typescript-eslint/no-unused-vars": "warn", // 禁止定义未使用的变量
    "@typescript-eslint/no-inferrable-types": "warn", // 可以轻松推断的显式类型可能会增加不必要的冗长
    "@typescript-eslint/no-namespace": "warn", // 禁止使用自定义 TypeScript 模块和命名空间。
    "@typescript-eslint/no-explicit-any": "warn", // 禁止使用 any 类型
    "@typescript-eslint/ban-ts-ignore": "off", // 禁止使用 @ts-ignore
    "@typescript-eslint/ban-types": "warn", // 禁止使用特定类型
    "@typescript-eslint/explicit-function-return-type": "warn", // 不允许对初始化为数字、字符串或布尔值的变量或参数进行显式类型声明
    "@typescript-eslint/no-var-requires": "warn", // 不允许在 import 语句中使用 require 语句
    "@typescript-eslint/no-empty-function": "warn", // 禁止空函数
    "@typescript-eslint/no-use-before-define": "warn", // 禁止在变量定义之前使用它们
    "@typescript-eslint/ban-ts-comment": "warn", // 禁止 @ts-<directive> 使用注释或要求在指令后进行描述
    "@typescript-eslint/no-non-null-assertion": "warn", // 不允许使用后缀运算符的非空断言(!)
    "@typescript-eslint/explicit-module-boundary-types": "warn", // 要求导出函数和类的公共类方法的显式返回和参数类型
    // react (https://github.com/jsx-eslint/eslint-plugin-react)
    "react-hooks/rules-of-hooks": "error",
    "react-hooks/exhaustive-deps": "error",
    "no-debugger": "error",
    "no-console": "warn"
  }
}

npm run lint 你会得到类型的提示 ✔ No ESLint warnings or errors ✨ Done in 3.48s.

Prettier

npm run   -D prettier

同时我也推荐你安装 Prettier VS Code 插件 ,这样你不用依赖命令行工具就可以在 VS Code 中进行文件格式化。在你的项目中安装和配置它意味着 VSCode 将使用你项目的设置,因此仍然有必要在此处添加它。 我们将在根目录添加两个文件:

.prettierrc.js


// @see: https://www.prettier.cn

module.exports = {
	// 超过最大值换行
	printWidth: 130,
	// 缩进字节数
	tabWidth: 2,
	// 使用制表符而不是空格缩进行
	useTabs: true,
	// 结尾不用分号(true有,false没有)
	semi: true,
	// 使用单引号(true单双引号,false双引号)
	singleQuote: false,
	// 更改引用对象属性的时间 可选值"<as-needed|consistent|preserve>"
	quoteProps: "as-needed",
	// 在对象,数组括号与文字之间加空格 "{ foo: bar }"
	bracketSpacing: true,
	// 多行时尽可能打印尾随逗号。(例如,单行数组永远不会出现逗号结尾。) 可选值"<none|es5|all>",默认none
	trailingComma: "none",
	// 在JSX中使用单引号而不是双引号
	jsxSingleQuote: false,
	//  (x) => {} 箭头函数参数只有一个时是否要有小括号。avoid:省略括号 ,always:不省略括号
	arrowParens: "avoid",
	// 如果文件顶部已经有一个 doclock,这个选项将新建一行注释,并打上@format标记。
	insertPragma: false,
	// 指定要使用的解析器,不需要写文件开头的 @prettier
	requirePragma: false,
	// 默认值。因为使用了一些折行敏感型的渲染器(如GitHub comment)而按照markdown文本样式进行折行
	proseWrap: "preserve",
	// 在html中空格是否是敏感的 "css" - 遵守CSS显示属性的默认值, "strict" - 空格被认为是敏感的 ,"ignore" - 空格被认为是不敏感的
	htmlWhitespaceSensitivity: "css",
	// 换行符使用 lf 结尾是 可选值"<auto|lf|crlf|cr>"
	endOfLine: "auto",
	// 这两个选项可用于格式化以给定字符偏移量(分别包括和不包括)开始和结束的代码
	rangeStart: 0,
	rangeEnd: Infinity,
	// Vue文件脚本和样式标签缩进
	vueIndentScriptAndStyle: false
};

.prettierignore

.prettierignore
.yarn
.next
dist
node_modules

在这个文件中我列了一些目录,我不希望 prettier 在这些目录中浪费任何资源去进行格式化。你也可以使用类似 *.html 这样的方式去忽略你选择的文件类似 现在我们在 package.json 添加新的 script ,然后我们就可以运行 Prettier: package.json


  "scripts: {
    ...
    "prettier": "prettier --write ."
  }

你可以运行

npm run   prettier

自动格式化、修复和保存项目中你未忽略的所有文件。 默认情况下,我的格式化程序更新了大约 5 个文件。 你可以在 VS Code 左侧的源代码管理选项卡中的已更改文件列表中看到它们。

Edit this page
最近更新: 2025/12/2 01:46
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人