202409使用eslint与prettier的实战

vue-format

node.js v20.0.0、pnpm v9.5.0

初始化项目

sh 复制代码
  pnpm create vue@latest

参考自 vue 官网

eslint 的安装并配置

sh 复制代码
  npm init @eslint/config@latest

参考自 eslint 官网

  • 选项参考
sh 复制代码
  √ How would you like to use ESLint? · problems
  √ What type of modules does your project use? · esm
  √ Which framework does your project use? · vue
  √ Does your project use TypeScript? · typescript
  √ Where does your code run? · browser
  • 依赖变化
diff 复制代码
# package.json > devDependencies
+ @eslint/js 9.11.1
+ globals 15.9.0
+ typescript-eslint 8.7.0

安装eslint的vscode的插件

打开vscode的扩展,快捷键为 Ctrl + Shift +X,搜eslint,选择并安装ESLint (v3.0.10),已安装的可跳过该步骤。

检查eslint是否工作正常

  • eslint.config.js文件中,新增如下规则
diff 复制代码
export default = [
   ...,
   {files: ["**/*.vue"], languageOptions: {parserOptions: {parser: tseslint.parser}}},

+  {
+    rules: {
+     'no-console': 'error' // 禁止使用console
+    }
+  }
]
  • 在任意js文件中测试,查看是否会飘红
js 复制代码
  console.log(111)
  • 截止目前的package.json文件
json 复制代码
{
  "name": "vue-format",
  "version": "0.0.0",
  "private": true,
  "type": "module",
  "scripts": {
    "dev": "vite",
    "build": "run-p type-check \"build-only {@}\" --",
    "preview": "vite preview",
    "build-only": "vite build",
    "type-check": "vue-tsc --build --force",
    "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
    "format": "prettier --write src/"
  },
  "dependencies": {
    "pinia": "^2.1.7",
    "vue": "^3.4.29",
    "vue-router": "^4.3.3"
  },
  "devDependencies": {
    "@eslint/js": "^9.11.1",
    "@rushstack/eslint-patch": "^1.8.0",
    "@tsconfig/node20": "^20.1.4",
    "@types/node": "^20.14.5",
    "@vitejs/plugin-vue": "^5.0.5",
    "@vue/eslint-config-prettier": "^9.0.0",
    "@vue/eslint-config-typescript": "^13.0.0",
    "@vue/tsconfig": "^0.5.1",
    "eslint": "^8.57.1",
    "eslint-plugin-vue": "^9.28.0",
    "globals": "^15.9.0",
    "npm-run-all2": "^6.2.0",
    "prettier": "^3.2.5",
    "typescript": "~5.4.0",
    "typescript-eslint": "^8.7.0",
    "vite": "^5.3.1",
    "vue-tsc": "^2.0.21"
  }
}

prettier 的安装与配置

在使用 pnpm create vue@latest 初始化项目的时候,如果 是否引入 Prettier 用于代码格式化 已经选择了 。那么就已经安装好了 Prettier,无需再安装了。

如果你之前选择的是 ,可以通过如下命令进行安装:

sh 复制代码
  pnpm i prettier @vue/eslint-config-prettier

其版本与附属依赖版本,参考如下:

json 复制代码
{
  "@vue/eslint-config-prettier": "^9.0.0",
   "prettier": "^3.2.5",
}

检查prettier是否工作正常

  • eslint.config.js文件中,新增配置如下:
diff 复制代码
import pluginVue from "eslint-plugin-vue";
+ import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'

export default = [
   ...,

  {
    rules: {
     'no-console': 'error' // 禁止使用console
    }
  },

+   /**
+   * prettier 配置
+   * 会合并根目录下的prettier.config.js 文件
+   * @see https://prettier.io/docs/en/options
+   */
+  eslintPluginPrettierRecommended,
]

添加之后,就会发现文件立即就飘红了,比如 Replace "globals"; with 'globals',建议使用单引号的提示。

此时,你Ctrl + S 进行保存的时候,代码会被自动修复。

其原因是设置了保存代码时自动修复,如果你的代码没自动修改,可以检查下 .vscode > settings.json的文件配置,参考如下:

json 复制代码
{
  "editor.codeActionsOnSave": {
    "source.fixAll": "explicit"
  },
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}

其实现格式化,是根据 prettier 的文件配置进行的。如:.prettierrc.json,详细配置可参考 prettier官网options 配置。

json 复制代码
{
  "$schema": "https://json.schemastore.org/prettierrc",
  "semi": false, // 是否在语句末尾加分号(默认true)
  "tabWidth": 2, // 指定缩进的空格数(默认2)
  "singleQuote": true, // 是否使用单引号(默认false)
  "printWidth": 100, // 每行字符换行的阈值(默认80)
  "trailingComma": "none"
}
相关推荐
森叶6 分钟前
webpack 的打包target讲解 & node环境打包下的文件存储造成不易察觉的坑点
前端·webpack·node.js
亿牛云爬虫专家17 分钟前
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
前端·javascript·爬虫·node.js·爬虫代理·puppeteer·代理ip
uhan2521 分钟前
2024年9月26日 linux笔记
linux·服务器·前端
Jiaberrr40 分钟前
uniapp视频禁止用户推拽进度条并保留进度条显示的解决方法——方案一
前端·javascript·微信小程序·uni-app·音视频
慧都小妮子1 小时前
Spire.PDF for .NET【页面设置】演示:设置 PDF 的查看器首选项和缩放系数
前端·pdf·.net·spire.pdf
OEC小胖胖1 小时前
js中正则表达式中【exec】用法深度解读
开发语言·前端·javascript·正则表达式·web
有一个好名字1 小时前
vue3路由
前端·vue.js
马卫斌 前端工程师2 小时前
npm 源切换以及添加 使用工具 nrm 使用方法
前端·npm·node.js
小彭努力中2 小时前
49. 建模软件绘制3D场景(Blender)
前端·3d·blender·webgl
任风雨2 小时前
JWT的基础与使用
前端·网络·安全