这是使用沙哑+绒毛分级的正确方法吗?

时间:2018-08-08 13:41:54

标签: husky lint-staged

我发现许多博客(包括lint-staged文档)介绍了一种使用husky + lint-staged的方式,如package.json中定义的以下代码:

{
  "scripts": {
    "precommit": "lint-staged"
  },
  "lint-staged": {
    "src/**/*.js": ["prettier --write","eslint --fix", "git add"]
  }
}

由于存在“漂亮”或“ eslint --fix”都无法修复的错误,我们如何防止这种用法带来的错误提交?

4 个答案:

答案 0 :(得分:2)

您确实可以在lint阶段运行多个命令,如果其中一个失败,您将获得正确的退出代码,如下例所示。这可以通过新的沙哑钩子(https://github.com/typicode/husky#upgrading-from-014)系统实现:

package.json中具有这样的配置:

"husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    },
"lint-staged": {
    "src/**/*.{js,jsx,ts,tsx,json,css}": [
      "prettier --write",
      "eslint --fix src/",
      "tslint --fix --project .",
      "git add"
    ]
  },

配置运行prettier, eslint and tslint-在掉毛问题上会出现以下错误:

husky > pre-commit (node v8.12.0)
  ↓ Stashing changes... [skipped]
    → No partially staged files found...
  ❯ Running linters...
   ❯ Running tasks for src/**/*.{js,jsx,ts,tsx,json,css}
      ✖ prettier --write
        eslint --fix src/
        tslint --fix --project .
        git add
✖ prettier --write found some errors. Please fix them and try committing again.
...
husky > pre-commit hook failed (add --no-verify to bypass)

最后一行向您显示git自己的pre-commit挂钩失败,因此您的更改将无法提交(如果它们不可修复)。

答案 1 :(得分:1)

我使用了一些文件,以防有人感兴趣:

// .prettierrc

{
  "printWidth": 120,
  "proseWrap": "preserve",
  "semi": false,
  "singleQuote": true,
  "useTabs": false,
  "tabWidth": 2,
  "arrowParens": "avoid",
  "trailingComma": "es5"
}

// .lintstagedrc

{
  "**/*.+(js|md)": [
    "prettier --write",
    "eslint --fix src/",
    "git add"
  ]
}

// .prettierignore

node_modules
coverage

// .huskyrc

{
    "hooks": {
      "pre-commit": "lint-staged"
    }
}

答案 2 :(得分:0)

您不能,但是也不能通过定期掉毛来做到这一点。这不会给您解决方案,但会指出您的代码中可能存在的错误。

答案 3 :(得分:0)

我认为好的做法不仅仅是这些工具。 我会利用 .editorconfig(并非每个人都使用相同的 IDE/Editor)与良好的 eslint 设置、测试和格式化脚本相结合。您将需要执行两次此操作,一次在通过 husky.. 的钩子设置中,一次在 CI 中。 (CI 会抓住那些试图通过钩子进行 --no-verify 的人)

运行 npm install --save-dev husky lint-staged 并在根目录下创建 .lintstagedrc.huskyrc

package.json 中某些脚本的示例设置

package.json

在这个例子中,我有 lint、prettier 和一个格式脚本。请注意,我忽略了 .gitignore 中的文件进行格式化。

   "format": "npm run pretty -- --write",
    "lint": "eslint --ignore-path .gitignore --ext .js --ext .jsx .",
    "pretty": "prettier --ignore-path .gitignore \"**/*.+(js|json|md)\"",

.lintstagedrc

当从 husky hook 调用 lint-staged 时,这将运行我想要运行的命令。如果您想将 --fix 添加到 eslint 命令,您可以在此处附加它。请确保您的更漂亮的工具已设置为随后处理格式。


{
  "*.+(js|jsx)":[
    "eslint"
  ],
  "*.+(js|json|md)":[
    "prettier --write"
  ]
}

.huskyrc

显然,您可以通过 husky.. 甚至强制执行提交消息,在 pre-commit、pre-push 或其他钩子中扩展大量脚本。

{
  "hooks":{
    "pre-commit": "lint-staged && npm run test",
    "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
  }
}