最新的 react-router 中采用了 vite + react
推荐安装以下 9 个包:
因为只有开发阶段需要 eslint,所以将 eslint 的这些依赖添加到开发阶段的依赖 devDependencies
中即可。
eslint 的 2 个包:
npm i eslint eslint-define-config -D
react 的 2 个包:
npm i eslint-plugin-react eslint-plugin-react-hooks -D
prettier 的 3 个包:
npm i prettier eslint-config-prettier eslint-plugin-prettier -D
typescript 的 2 个包:
npm i @typescript-eslint/parser @typescript-eslint/eslint-plugin -D
使用基于 eslint-define-config
依赖的 defineConfig
方法来配置 .eslintrc.js
。
defineConfig
方法里的基本成员:
parserOptions
用来配置解析器选项。
parserOptions
可用的选项有:
const { defineConfig } = require('eslint-define-config')
module.exports = defineConfig({
env: { // 环境
browser: true, // 浏览器环境中的全局变量。
node: true, // Node.js 全局变量和 Node.js 作用域。
es6: true // 启用除了 modules 以外的所有 ECMAScript 6 特性(该选项会自动设置 ecmaVersion 解析器选项为 6)。
},
parser: "@typescript-eslint/parser", // 解析器
parserOptions: { // 解析器配置
ecmaVersion: "latest", // 5(默认), 你可以使用 6、7、8、9 或 10 来指定你想要使用的 ECMAScript 版本。你也可以用年份命名的版本号,你也可以用 latest 来指向最新的版本。
sourceType: "module", // 设置为 "script" (默认) 或 "module"(如果你的代码是 ECMAScript 模块)。
ecmaFeatures: { // 表示你想使用的额外的语言特性
jsx: true // 启用 JSX
}
},
extends: [
"eslint:recommended",
"prettier",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:@typescript-eslint/recommended",
],
plugins: [
"prettier",
"react",
"react-hooks",
"@typescript-eslint"
],
rules: {
// eslint 的配置
"quotes": [ERROR, "single"], //单引号
'no-console': ['error', { allow: ['log'] }],// 允许使用 console.log()
"no-confusing-arrow": 0, // 禁止在可能与比较操作符相混淆的地方使用箭头函数
// eslint-plugin-react 的配置
"react/no-this-in-sfc": 0,
"react/prop-types": 0,
"react/display-name": "off",
// eslint-plugin-react-hooks 的配置
"react-hooks/rules-of-hooks" : "error",
"react-hooks/exhaustive -deps" : "warn"
}
})
对于 rules
规则集的配置,请参考以下官方规则:
*.sh
*.md
*.woff
*.ttf
.vscode
.idea
.husky
.local
dist
node_modules
Dockerfile
/public
/docs
/bin
配置 Prettier 的选项:
prettier.config.js 配置案例:
module.exports = {
printWidth: 100, // 最大行长规则通常设置为 100 或 120。
tabWidth: 2, // 指定每个标签缩进级别的空格数。
useTabs: false, // 使用制表符而不是空格缩进行。
semi: false, // true(默认): 在每条语句的末尾添加一个分号。false:仅在可能导致 ASI 失败的行的开头添加分号。
singleQuote: true, // 使用单引号而不是双引号
quoteProps: 'as-needed', // 引用对象中的属性时,仅在需要时在对象属性周围添加引号。
bracketSpacing: true, // 在对象文字中的括号之间打印空格。
trailingComma: 'none', // "none":没有尾随逗号。"es5": 在 ES5 中有效的尾随逗号(对象、数组等),TypeScript 中的类型参数中没有尾随逗号。"all"- 尽可能使用尾随逗号。
bracketSameLine: false, // 将>多行 HTML(HTML、JSX、Vue、Angular)元素放在最后一行的末尾,而不是单独放在下一行(不适用于自闭合元素)。
jsxSingleQuote: false, // 在 JSX 中使用单引号而不是双引号。
arrowParens: 'always', // 在唯一的箭头函数参数周围始终包含括号。
insertPragma: false, // 插入编译指示
requirePragma: false, // 需要编译指示
proseWrap: 'never', // 如果散文超过打印宽度,则换行
htmlWhitespaceSensitivity: 'strict', // 所有标签周围的空格(或缺少空格)被认为是重要的。
endOfLine: 'lf', // 确保在文本文件中仅使用 ( \n)换行,常见于 Linux 和 macOS 以及 git repos 内部。
rangeStart: 0, // 格式化文件时,回到包含所选语句的第一行的开头。
};
/dist/*
/public/*
/node_modules/**
.local
.output.js
**/*.svg
**/*.sh
请去检查并完善 vite.config.ts
配置文件中是否对 @ 符进行了配置。没有的话,请参阅此文。
报错:无法找到模块“xxx”的声明文件,xxx隐式拥有 “any“ 类型
请去检查并完善 tsconfig.json
配置文件。可参阅此文来解决此问题。
【参考文章】
vite + react + ts 手摸手做项目系列一 (项目配置篇)
vite创建react项目及基础配置
React+vite3.x实战配置
Vite从零搭建React+TS项目(含eslint、husky配置)
Vite + React + Typescript 最佳实践
React项目配置prettier和eslint的方法
【推荐阅读】
ESLint 中文官网文档:配置 ESLint
TypeScript ESLint 文档
配置 Prettier 的选项