ESLint - 最佳实践

更新于 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'
  }
}

```,

你可能感兴趣的:(ESLint - 最佳实践)