create-react-app+eslint配置+precommit+允许装饰器

1、根路径增加.eslintignore文件:

build/*.js
config/*.js
 
2、安装依赖:
eslint-config-airbnb
 
3、根路径增加.eslintrc.js文件
 
module.exports = {
"parser": "babel-eslint",
"env": {
"browser": true,
"es6": true,
"node": true
},
"parserOptions": {
"ecmaVersion": 6,
"sourceType": "module"
},
"extends": "airbnb",
"plugins": ["react-hooks"],
"rules": {
"react/jsx-filename-extension": [1, { extensions: [".js"] }], // 允许js文件使用jsx语法
"react/prop-types": 1, // 开启PropTypes验证
"react/forbid-prop-types": 0,
"react/prefer-stateless-function": 1, // 建议使用函数式组件
"linebreak-style": 0,
"react/jsx-one-expression-per-line": 0,
"react-hooks/rules-of-hooks": "error", // 检查 Hook 的规则
"react-hooks/exhaustive-deps": "warn", // 检查 effect 的依赖
'import/no-unresolved': [1, { ignore: ['^@/'] }],
}
}
 
4、不让eslint的报错阻塞编译,而只以warning形式弹出
{
          test: /\.(js|mjs|jsx|ts|tsx)$/,
          enforce: 'pre',
          use: [
            {
              options: {
                cache: true,
                formatter: require.resolve('react-dev-utils/eslintFormatter'),
                eslintPath: require.resolve('eslint'),
                resolvePluginsRelativeTo: __dirname,
                emitWarning: true // <=========加这句
              },
              loader: require.resolve('eslint-loader'),
            },
          ],
          include: paths.appSrc,
        },
 
5、per-commit
(1) yarn add pre-commit --dev
(2) package.json的scripts
"scripts": {
...
"lint": "eslint --fix --ext .js --ext .jsx src"
},
(3) package.json增加
"pre-commit": [
"lint"
]
 
6、允许装饰器
yarn add @babel/plugin-proposal-decorators

"babel": {
    "plugins": [
      ["@babel/plugin-proposal-decorators", { "legacy": true }]
    ],
    "presets": [
      "react-app"
    ]
  }
posted @ 2019-08-30 20:43  朔雪寒D.A.G  阅读(2439)  评论(0编辑  收藏  举报