- ESLint:作代码质量检测、编码风格约束等;
- Prettier: 专注于代码格式化的工具,美化代码;
- EditorConfig: 跨编辑器和IDE编写代码,保持一致的简单编码风格;
Eslint 编码风格约束 比如分号 引号这些 ; 质量检查 比如冗余代码检查等
最初 有这两个就行了, 可以实现团队协作 问题不大
后来有了代码美化工具, 例如 prettier 这个是为了美化代码 比如换行等格式化 看起来代码没那么乱
如果两个都用了 问题来了 冲突。 prettier规则和eslint有了冲突 导致的结果: prettier美化完save的时候eslint用自己的规则又还原回去了
导致死循环 崩溃
解决办法: editorconfig 加一个编辑器规则配置文件, 让这个规则和eslint保持一致 并且可以添加一些编辑器的配置,使大家编辑器配置一样
再加一个工具吧, prettierrc文件, 让大家的prettier规则一致
综上 编辑器配置一样、eslint配置一样、prettier美化配置一样 当然编写出来的代码是一样的
默认情况下 vscode是没有校验的, 项目里的eslintrc也不会被识别。 开发没有报错, 但是在控制台编译时会报错
-
安装eslint插件,然后在编辑器右下角可以看到Eslint 代表vscode代码风格被eslint托管,这时编辑器会读取本地eslintrc配置 并自动fix
此时setting.json 是这样的。这是必要的
// vscode 配置保存时运行eslint、stlyelint并自动fix
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true
},
- 升级(安装prettier)
出现冲突, 比如prettier默认规则是行尾加分号, 用的是双引号, 但是eslint规则是单引号 行尾没分号
因为setting里配置的是保存是使用eslint修复, 所以情况还好 eslint把引号和分号fix掉了
下面开始配置prettierrc 让双方规则一致。 既能体验prettier的美化代码 又能兼顾eslint
editorconfig好像很鸡肋 没什么卵用。 因为它只能设置缩进这样简单的风格 单双隐号都不管
setting
{
"folders": [ ],
"settings": {
// 文件内的字体
"editor.fontSize": 16,
// 行高
// "editor.lineHeight": 26,
"editor.rulers": [],
// vscode 配置保存时运行eslint、stlyelint并自动fix
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.fixAll.stylelint": true
},
// "editor.semanticTokenColorCustomizations": null,
// 和27行的效果是一样的
"editor.formatOnSave": true,
"eslint.validate": ["javascript", "vue", "html"],
// "editor.defaultFormatter": "esbenp.prettier-vscode",
"vetur.format.defaultFormatter.html": "js-beautify-html" //格式化.vue中html
}
}
eslint rc
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true
},
extends: ['plugin:vue/essential', 'standard'],
plugins: ['vue'],
// add your custom rules here
// it is base on https://github.com/vuejs/eslint-config-vue
rules: {
// allow async-await
'generator-star-spacing': 'off',
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'arrow-parens': 'off',
// allow async-await
'eol-last': 'off',
'max-len': 0,
'space-before-function-paren': 'off',
quotes: [
// 尽可能使用单引号
'error',
'single'
],
semi: [
// 尽可能不加分号
'error',
'never'
],
'no-new': 0,
'prefer-promise-reject-errors': 0,
camelcase: 0,
'vue/no-use-v-if-with-v-for': 0,
'vue/require-component-is': 0,
'vue/valid-v-model': 0
}
}
prettier
module.exports = {
// 设置强制单引号
singleQuote: true,
// 设置语句末尾不加分号
semi: false,
// jsx中使用单引号
jsxSingleQuote: true,
// tab缩进大小,默认为2
tabWidth: 2,
// 使用tab缩进,默认false
useTabs: false,
// 对象中打印空格 默认true
// true: { foo: bar }
// false: {foo: bar}
bracketSpacing: true,
// 箭头函数参数括号 默认avoid 可选 avoid| always
// avoid 能省略括号的时候就省略 例如x => x
// always 总是有括号
arrowParens: 'avoid'
// 为多行数组的非末尾行添加逗号 es5的对象,数组等
// "trailingComma": "es5",
// 每行最大宽度 100
// "printWidth": 100,
}