更新于 2020年3月30日
google && pretiter
module.exports = {
root: true,
env: {
'browser': true,
'es6': true,
'node': true,
},
// globals: {
// Vue: 'readonly' // ==> vue 全局ProvidePlugin
// React: 'writable', // ==> 下面都是react 全局ProvidePlugin
// ReactDOM: 'writable',
// useState: 'writable',
// useEffect: 'writable',
// useContext: 'writable',
// useRef: 'writable',
// useCallback: 'writable',
// useMemo: 'writable',
// useReducer: 'writable',
// useImperativeHandle: 'writable',
// useDebugValue: 'writable',
//},
// parser: '@typescript-eslint/parser', // ==> TS 依赖 @typescript-eslint/eslint-plugin @typescript-eslint/parser
parser: 'babel-eslint', // 支持babel新语法 依赖babel-eslint
parserOptions: {
// 'ecmaVersion': 2019, // es版本
// 'sourceType': 'module' // js模块化
},
extends: [
'eslint:recommended',
// 'plugin:react/recommended', // ==> react
// google
'google',
// vue
'plugin:vue/vue3-recommended', // ==> vue
// prettier
'plugin:prettier/recommended'
],
plugins: [
// react', // ==> react
// '@typescript-eslint', // ==> ts 依赖eslint-plugin-react
// 禁用eslint中与prettier冲突的配置(ts已有) 依赖eslint-config-prettier
'prettier'
],
// plugins: ['react', '@typescript-eslint', 'prettier'], // ==> TS 依赖eslint-plugin-react
rules: {
// eslint-plugin-prettier 配置 (prettier读取eslint中的配置)(生成模式关闭格式化,否则导致打包慢)
"prettier/prettier": [process.env.NODE_ENV === 'production' ? "off" : "error",
// prettier 规则配置
{
'printWidth': 100, // 一行代码超过这个值换行
'endOfLine': 'auto', // 换行cr检查
'singleQuote': true, // 使用单引号
'semi': false, // 语句结尾无分号
'trailingComma': 'none' // 对象最后一个属性不加添加逗号
}],
// google
// eslint
'no-unused-vars': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 定义但未使用的变量
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 生产时无console语句
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 生产时无debugger关键字
'prefer-promise-reject-errors': 'off', // reject时必须new Error返回错误信息,有利于代码栈追踪 (增加代码复杂度,非大型项目不需要)
'valid-jsdoc': 'off', // 注释检查 (由于object中的方法缺少注释插件,很不好修改,暂时这么着)
'no-invalid-this': 'off', // 禁止 this 关键字在类或类对象之外出现 (有时候是this在函数里被call间接调用)
'require-jsdoc': 'off' // 禁止 this 关键字在类或类对象之外出现 (有时候是this在函数里被call间接调用)
// vue
'vue/no-use-v-if-with-v-for': 'off', // 太多没法改,然而关不了 // ==> vue
},
}
airbnb
module.exports = {
root: true,
env: {
'browser': true,
'es6': true,
},
parserOptions: {
'parser': 'babel-eslint', // 支持babel新语法
// 'ecmaVersion': 2019, // es版本
// 'sourceType': 'module' // js模块化
},
extends: [
'eslint:recommended',
// airbnb
'airbnb-base',
// vue
'plugin:vue/essential',
// prettier
'plugin:prettier/recommended'
],
plugins: [
// eslint-config-prettier (禁用eslint中与prettier冲突的配置)
'prettier'
],
rules: {
// eslint-plugin-prettier 配置 (prettier读取eslint中的配置)
"prettier/prettier": ["error",
// prettier 规则配置
{
'endOfLine': 'auto', // 换行cr检查
'singleQuote': true, // 启动单引号
'semi': false, // 语句结尾无分号
}],
// airbnb
'import/no-unresolved': 'off', // 引入模块路径检查(vue难以解析路径)
'import/extensions': 'off', // import文件不加后缀检查
'import/no-extraneous-dependencies': 'off', // 无外来依赖检查(要求只能用npm依赖,导致无法使用cdn)
'import/prefer-default-export': 'off', // 优先使用export default
// eslint
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 生产时无console语句
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', // 生产时无debugger关键字
'linebreak-style': 'off', // 换行检查
'func-names': 'off', // 函数必须命名(导致匿名函数无法使用)
'no-restricted-syntax': 'off', // 禁用特定语法(导致一些语法无法使用:for of)
'no-use-before-define': ['error', { // 函数必须先定义后使用
'functions': false
}],
'no-plusplus': 'off', // 禁用 ++ --
'no-continue': 'off', // 禁用 continue
'no-param-reassign': 'off', // 禁止函数的参数重写赋值
'class-methods-use-this': 'off', // class中的方法必须使用this
'no-unused-expressions': 'off'
}
}
```,