Husky/lint-staged 是否可以排除/忽略文件?

uid*_*ing 5 husky lint-staged git-husky

使用 Husky/lint-staged 挂钩时是否可以排除/忽略文件?

查看文档 atm 但没有任何运气找到任何关于此的内容。

希望有类似的东西

/*ignore*/
Run Code Online (Sandbox Code Playgroud)

我可以添加的标签。

使 lint-staged 忽略导致格式问题的某些文件。

对此的任何想法都非常感谢:)

Fre*_*and 21

我终于找到了如何做到这一点(至少截至lint-staged v11.1.2

package.json

"lint-staged": {
  "!(path/to/excluded/dir/**/*)*.ts": [
    "eslint --fix",
    "prettier --write"
  ]
}
Run Code Online (Sandbox Code Playgroud)

请注意,globstar 模式位于否定模式内部,而不是外部。这可确保子目录也被排除在外。


uid*_*ing 11

结束添加

.prettierignore 
Run Code Online (Sandbox Code Playgroud)

文件。

不理想,但似乎可以完成工作。

  • 我不使用`prettier`包,因此添加这样的文件并不理想。 (2认同)
  • 就我而言,它是 .eslintignore 文件 (2认同)

Aam*_*idi 7

如果有人还在寻找,请看看这个https://github.com/okonet/lint-staged#filtering-files它有很好的例子。

\n\n

过滤文件

\n\n

Linter 命令适用于由glob 模式定义的所有暂存文件的子集。`lint-staged\xc2\xb4 使用micromatch来匹配具有以下规则的文件:

\n\n
    \n
  • 如果 glob 模式不包含斜杠 ( /),则将启用 micromatchmatchBase选项,因此无论目录如何,glob 都会匹配文件的基本名称:\n\n
      \n
    • "*.js"将匹配所有 JS 文件,例如/test.js/foo/bar/test.js
    • \n
    • "!(*test).js"。将匹配所有 JS 文件,除了以 , 结尾的文件test.js,所以foo.js但不是foo.test.js
    • \n
  • \n
  • 如果 glob 模式确实包含斜杠 ( /),它也将匹配路径:\n\n
      \n
    • "./*.js"将匹配 git repo 根目录中的所有 JS 文件,所以/test.js但不是/foo/bar/test.js
    • \n
    • "foo/**/\\*.js"将匹配目录中的所有 JS 文件/foo,所以/foo/bar/test.js但不是/test.js
    • \n
  • \n
\n

  • 我的最终语法(对于喜欢复制和修改内容的懒人):“projects/!(node_modules|dist)/**/*.{js,ts,json,css,scss,html}” (4认同)

Aye*_*har 6

在 package.json 中配置 lint-staged 或如果您使用任何其他 IDE,为了通过 lint-Staged 和 husky hooks 忽略/排除文件,您可以在 lint-staged 对象中添加一个“ignore”键来使它忽略您要忽略的任何包或文件。使用以下可扩展语法:

{
  "lint-staged": {
    "linters": {
      "src/**/*.js": ["formatter --write", "git add"],
    },
    "ignore": ["node_modules", "dist", "package-lock.json"]  }
}
Run Code Online (Sandbox Code Playgroud)

只需将目标模式添加到 'linters' 对象以及您之前可能添加到 .prettierignore 到 lint-Staged 对象的“忽略”键的所有被忽略的文件。你去吧!

  • 我认为不再支持“忽略”。您可以使用 `"!(*test).js"` /sf/answers/4204408071/ (3认同)

saN*_*iks 5

因此,我一整天都在努力寻找这个问题的答案,并查看了所有论坛,建议他们使用 minimatch 进行 glob 检查,这对于旧版本可能是正确的,但他们对新版本使用 micromatch 并解决这个问题我们可以使用它们的模式来排除某些目录因此在您的 .lintstagedrc 中您可以添加以下模式来避免某些文件夹

{
  "*.{json,md,html,scss}": ["prettier --write", "git add"],
  ["**/!(folder1|folder2)/*.ts"]: ["tslint --project tsconfig.json -c tslint.commit.json --fix", "prettier --write", "git add"]
}
Run Code Online (Sandbox Code Playgroud)

因此,这里的 glob 是一个实际的数组,请确保不要在字符串中传递此数组,否则它将无法识别模式也不包含**/*.ts lint-staged 的​​原因会自动将其转换为 matchBase 比较如果它在模式中找到 /,那么包含它也将与您的folder1|folder2 文件匹配。