Vue项目优化:编程规范|(一)Eslint + Prettier 统一代码风格

简介: Vue项目优化:编程规范|(一)Eslint + Prettier 统一代码风格

前言

团队开发的项目,我们需要对团队编程代码风格进行强制性统一规范。在规范过程中,我们会借助一些工具。

eslint VS prettier

ESLint、StyleLint、TSLint(已废弃)都属于Linters,它们按照一定规则对代码进行校验,另外,Linters的客户端还会提供一些修复功能,实际开发中,常用的IDE借助这些客户端可以实现代码自动修复。

既然Linters已经可以自动修复了,为什么我们还要用Prettier?

Linters的自动修复是基于上述两种规则:Formatting和Code-quality。

在Code-quality上,Linters做的做够好了,像no-unused-varsno-extra-bindno-undef等;

但是在Formatting上,Linters虽然能在一定程度上保证代码的格式,像max-lenno-mixed-spaces-and-tabskeyword-spacing等。

但是如果我们的团队规范要求更高的话,要保证团队的代码风格完全一致,Linters还不足。比如下面两种写法,Linters都是允许的:

// 小明写的
const {a, b, c} = obj
// 小李写的
const {
  a,
b,
c,
} = obj
复制代码

因此,在各种Linters的基础下,我们还需要Prettier。

关于PrettierPrettier是一个多语言支持的代码格式化工具,它也是通过AST解析代码,然后以一个特定的格式输出格式化后的代码。相比Linters,Prettier没有那么多针语言语法的规则,而是一个纯粹的代码格式化工具,在Prettier看来,任何东西都是可以格式化的。

Prettier和Linter在代码格式化的思路差异:

  • Linters的格式化思路是:给我一个规则,如果不符合这个规则,我才会去格式化。
  • Prettier的格式化思路是:给我一个规则,如果不符合这个规则,我按照A格式格式化,如果符合这个规则,我按照B格式格式化。

因此,基于Prettier的格式化思路,代码的风格差异性能够被完全抹除,不管你怎么写,Prettier格式化后的代码格式总是一样的。

Linters和Prettier之间是否会有冲突?

有冲突,所以最佳实践是禁用掉Linters中所有与Prettier冲突的Formatting Rules,用prettier负责格式化

linters有两种能力:检查代码质量(是否有未使用的变量,使用函数式编程的函数是否产生副作用等)和检查代码风格,另外,通过IDE借助这些linters客户端可以实现一些代码自动修复。

但是代码风格方面完全靠Linters是远远不够的,还需要prettier,pretter没有对代码的质量进行检查的能力,其只会对代码风格按照指定的规范进行统一,避免一个项目中出现多种不同的代码风格。

Eslint + Prettier 统一代码风格

安装Eslint

npm install --save-dev eslint eslint-plugin-vue
// or
yarn add -D eslint eslint-plugin-vue
复制代码

安装eslint之后,默认会在项目根目录下就会生成.eslintrc.js,这里还安装了eslint-plugin-vue,因为要使用到他的vue/recommended插件。

配置.eslintrc.js

module.exports = { 
    root: true, 
    env: { 
        node: true, 
        browser: true, 
        es6: true 
    }, 
    extends: [ "plugin:vue/recommended", "eslint:recommended" ], 
    parserOptions: { "parser": "babel-eslint" }, 
    rules: {} // 用来自定义一些符合个人或者团队的规则 }
复制代码

根目录下创建.eslintignore文件,配置需要忽略检查的文件:

# 忽略build目录下类型为js的文件的语法检查
build/*.js
# 忽略src/assets目录下文件的语法检查
src/assets
# 忽略public目录下文件的语法检查
public
dist
复制代码

安装Prettier

npm install --save-dev prettier eslint-config-prettier eslint-plugin-prettier
复制代码
  • prettier: 核心模块
  • eslint-config-prettier: 关闭所有不必要或可能跟prettier产生冲突的规则
  • eslint-plugin-prettier: 可以让eslint使用prettier规则进行检查

根目录下.eslintrc.json文件中添加extends设置:

{
    // ...
    "extends": [
        // ...
        "plugin:prettier/recommended",
    ],
}
复制代码

根目录下创建.prettierrc.json文件:

{
  "trailingComma": "es5",
  "tabWidth": 2,
  "semi": true,
  "singleQuote": true
}
复制代码

修改.prettierrc.json文件后,需要重启vscode才生效。如果配置后,配置不生效,尝试以下设置:

网络异常,图片无法展示
|

网络异常,图片无法展示
|



相关文章
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
765 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
565 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
737 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
667 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
589 0
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
1367 4
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
1084 12
|
9月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
777 2
|
8月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
640 137
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
1223 0