赫斯基/棉绒阶段是否可以排除/忽略文件?



使用 Husky/lint 暂存的钩子时是否可以排除/忽略文件?

浏览文档自动取款机,但没有任何运气找到任何关于此的内容。

希望有类似的东西

/*ignore*/

标记,我可以添加。

若要使 lint 暂存忽略导致格式问题的某些文件。

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

最终添加

.prettierignore 

文件。

不理想,但似乎做得很好。

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

)在package.json

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

请注意,球星模式在否定模式内,而不是在否定模式之外。这可确保子目录也被排除。

在 package.json 中配置 lint-staged 或 如果您使用的是任何其他 IDE,为了通过 lint-stageed 和 husky 钩子忽略/排除文件,您可以在 lint 暂存对象中添加"忽略"键,使其忽略要忽略的任何包或文件。使用以下可扩展语法:

{
"lint-staged": {
"linters": {
"src/**/*.js": ["formatter --write", "git add"],
},
"ignore": ["node_modules", "dist", "package-lock.json"]  }
}

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

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

过滤文件

Linter 命令处理所有暂存文件的子集,由glob 模式定义。 "lint-staged"使用微匹配来匹配具有以下规则的文件:

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

所以我一整天都在试图找到答案,并查看所有论坛建议他们使用 minimatch 进行 glob 检查,这对于旧版本可能是正确的,但他们对新版本使用微匹配,为了解决这个问题,我们可以使用他们的模式来排除某些目录 因此,在您的 .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"]
}

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

可以通过三种方式修复:

  • .lintstagedrc.js
  • .prettierignore
  • lint-staged.config.js

更多信息 : https://github.com/okonet/lint-staged/issues/797

最新更新