赞
踩
1. Eslint可以对js语法检测、限制和修复
2. Eslint可以对代码风格进行格式化,但是不能对css、less等格式化
1. Prettier不可以对任何语法检测、限制和修复
2. Prettier可以对多种代码风格,包括js、jsx、ts、json、css、less、scss、html、vue等等进行格式化
从上面两点比较可以看出,Eslint对代码语法检测限制和修复更专业,而Prettier对代码风格更专业,所以项目中Eslint可以检测语法中潜在的问题,比如定义某个变量却没有使用,这时候Eslin会发出警告,Prettier专门做格式化,统一团队中所有人的代码风格。
所以项目中,Eslint做语法检测,Prettier做格式化,但是Eslint中也有对代码的格式化功能,会不会和Prettier的格式化冲突?会,但是可以解决,很简单,用eslint-plugin-prettier关掉所有和prettier冲突的eslint配置,也就是以prettier为主,相当于prettier接管了eslint中代码格式的问题,而语法校验依然用的是eslint,这样两者就完美结合了
下面是针对vue2(vue3不同,但是大同小异)的Eslint和Prettier需要的插件:
插件装完以后就需要配置Eslint和Prettier规则了,在项目根目录下新建.eslintrc.js文件 和.prettierrc.js文件,如下图:
.eslintrc.js文件 内容如下:
- module.exports = {
- root: true,
- parserOptions: {
- parser: 'babel-eslint'
- },
- env: {
- browser: true,
- node: true,
- es6: true
- },
- extends: [
- 'eslint:recommended',
- 'plugin:vue/strongly-recommended',
- '@vue/standard'
- ],
- // 添加规则
- /**
- * eslint https://eslint.bootcss.com/docs/rules/
- * vue扩展 https://github.com/vuejs/eslint-plugin-vue/tree/v6.2.2/docs/rules
- * https://eslint.vuejs.org/rules/
- * 0 or 'off'
- * 1 or 'warn'
- * 2 or 'error'
- */
- rules: {
- semi: 0,
- 'space-before-function-paren': 0,
- // 最大属性每行
- 'vue/max-attributes-per-line': [
- 2,
- {
- singleline: 5, // 一行是最大属性数
- multiline: {
- max: 1, // 多行是最大属性数
- allowFirstLine: false // 是否允许属性和标签在同一行
- }
- }
- ],
- // 自定义属性断字 my-prop (always,never,ignore)
- 'vue/attribute-hyphenation': [0, 'always'],
- // html标签自关闭
- 'vue/html-self-closing': [
- 1,
- {
- html: {
- void: 'always',
- normal: 'always',
- component: 'always'
- },
- svg: 'always',
- math: 'always'
- }
- ],
- // 组件名称模板 PascalCase,kebab-case,registeredComponentsOnly,ignores
- // 'vue/component-name-in-template-casing': [1, 'kebab-case'],
- 'vue/component-name-in-template-casing': 0,
- // 结束括号间距 关闭>标签括号之前强制执行一致的间距样式
- 'vue/html-closing-bracket-spacing': 0,
- // 单行元素的内容前后换行
- 'vue/singleline-html-element-content-newline': 0,
- // 禁止注册模板中未使用的组件
- 'vue/no-unused-components': 1,
- // 多行元素的内容前后换行
- 'vue/multiline-html-element-content-newline': 0,
- // 禁止在与 v-for 相同的元素上使用 v-if
- 'vue/no-use-v-if-with-v-for': 1,
- // 要求或禁止在标签的右括号前换行
- 'vue/html-closing-bracket-newline': 0,
- // template模板js解析错误
- 'vue/no-parsing-error': 1,
- // vue组件的name必须使用大驼峰式命名
- 'vue/name-property-casing': [1, 'PascalCase'],
- // 强制组建中方法顺序
- 'vue/order-in-components': 2,
- // 强制执行有效的 `v-show` 指令
- 'vue/valid-v-show': 1,
- // 要求使用 `===` 和 `!==`
- 'vue/eqeqeq': 2,
- // 禁用 console
- 'no-console': 0,
- // 禁用 tab
- 'no-tabs': 0,
- // 禁用 var
- 'no-var': 1,
- // 强制使用一致的反勾号、双引号或单引号
- quotes: [
- 2,
- 'single', // 要求尽可能地使用单引号
- {
- avoidEscape: true, // 允许字符串使用单引号或双引号
- allowTemplateLiterals: true // 允许字符串使用反勾号
- }
- ],
- // 禁止删除变量
- 'no-delete-var': 2,
- // 要求使用 const 声明那些声明后不再被修改的变量
- 'prefer-const': [
- 2,
- {
- ignoreReadBeforeAssign: false
- }
- ],
- // 强制 generator 函数中 * 号周围有空格 es6 Generators函数
- 'generator-star-spacing': 'off',
- // 禁止混合使用不同的操作符 运算符
- 'no-mixed-operators': 0,
- // 强制箭头函数的箭头前后使用一致的空格(--fix)
- 'arrow-spacing': 1,
- // 禁止或强制在代码块中开括号前和闭括号后有空格(--fix)
- 'block-spacing': 1,
- // 不允许在 case 子句中使用词法声明
- 'no-case-declarations': 1,
- // 要求使用骆驼拼写法
- camelcase: 0,
- indent: 'off',
- 'vue/html-indent': 'off',
- 'standard/computed-property-even-spacing': 0,
- 'no-mixed-spaces-and-tabs': 0,
- 'no-useless-escape': 0,
- 'vue/no-multi-spaces': 0,
- 'no-unexpected-multiline': 0
- }
- };
.prettierrc.js文件内容如下:
- module.exports = {
- endOfLine: 'auto',
- // 书写宽度
- printWidth: 80,
- // 语句末尾打印分号
- semi: true,
- // 使用单引号
- singleQuote: true,
- // 尾随逗号
- trailingComma: 'none',
- // 在方法的花括号前面加空格
- spaceBeforeFunctionParen: true,
- // 用键位tab缩进
- useTabs: true,
- // 标签换行不完整问题
- htmlWhitespaceSensitivity: 'ignore',
- // 在唯一的箭头函数参数周围包含括号
- arrowParens: 'always'
- };
到这里关于Eslint和Prettier的配置就结束了,但是还有一些需要注意的点,比如代码编辑器需要安装Eslint插件和Prettier插件,如下图:
到这里就结束了?没有,还需要配置编辑器的默认格式化插件,这个在vscode的settings.json文件中配置即可,比如html、css、less、JavaScript、vue、json、typescript等等语言的默认格式化插件,这里都配置为Prettier,(settings.json)如下所示:
- {
- "[html]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[css]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[less]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[javascript]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[vue]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[json]": {
- "editor.formatOnSave": true,
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[typescript]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[typescriptreact]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- "[markdown]": {
- "editor.defaultFormatter": "esbenp.prettier-vscode"
- },
- // vscode默认启用了根据文件类型自动设置tabsize的选项
- "editor.detectIndentation": false,
- // 重新设定tabsize
- "editor.tabSize": 2,
- // #每次保存的时候自动格式化
- "editor.formatOnSave": true,
- // 当编辑器失去焦点时,自动保存更改了的编辑器
- "files.autoSave": "onFocusChange",
- // 配置文件关联 :任何 vue 后缀的文件会被认为是vue文件
- "files.associations": {
- "*.vue": "vue"
- },
- // 编辑器字体大小
- "editor.fontSize": 18,
- // 若设置为 true,则自动从当前 Git 仓库的默认远程仓库提取提交
- "git.autofetch": true,
- // 在没有暂存的更改时提交所有更改
- "git.enableSmartCommit": true,
- // 每次保存的时候将代码按eslint格式进行修复
- "editor.codeActionsOnSave": {
- "source.fixAll.eslint": true
- },
- // 启用在vscode中重命名或者移动文件夹时自动更新导入路径的功能--js
- "javascript.updateImportsOnFileMove.enabled": "always",
- // 启用在vscode中重命名或者移动文件夹时自动更新导入路径的功能--ts
- "typescript.updateImportsOnFileMove.enabled": "always",
- // 每次保存的时候以下文件类型将代码按eslint格式进行修复
- "eslint.validate": [
- "javascript",
- "javascriptreact",
- "html",
- "vue"
- ],
- // 路径映射
- "alias-skip.mappings": {
- "@": "/src",
- "~@/": "/src",
- "views": "/src/views"
- },
- // 在文件路径中指定要替换的前缀
- "vue-helper.componentPrefix": {
- "alias": "@",
- "path": "src"
- },
- }
到这里就真的结束了。
彩蛋:如果上面关于vscode的settings.json配置需要团队中所有人都统一,这样带来的好处是,比如团队中有四五个人甚至更多人,你就不需要挨个挨个教他们配置,甚至还要看他们配置的对不对,而且你还可以告诉团队中的人Eslint+Prettier需要安装的vscode插件,做法非常简单,可以看下面的文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。