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

Posted

技术标签:

【中文标题】Husky/lint-staged 是不是可以排除/忽略文件?【英文标题】:Husky/lint-staged is it possible to exclude/ignore file?Husky/lint-staged 是否可以排除/忽略文件? 【发布时间】:2019-08-22 18:02:44 【问题描述】:

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

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

希望有类似的东西

/*ignore*/

我可以添加的标签。

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

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

【问题讨论】:

【参考方案1】:

添加完毕

.prettierignore 

文件。

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

【讨论】:

【参考方案2】:

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


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

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

【讨论】:

您好,非常感谢您的回答!将尝试您的解决方案,再次感谢:) 此配置格式不适用于 lint-staged 9.5(我不确定它更改了哪个版本。) 我认为 ignore 不再受支持。你可以使用"!(*test).js"***.com/a/60062972/569751 救命!谢谢 !与 lint-staged ^8.x.x 完美配合【参考方案3】:

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

package.json:

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

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

【讨论】:

【参考方案4】:

所以我一整天都在努力寻找这个问题的答案,并查看所有论坛建议他们使用 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"]

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

【讨论】:

【参考方案5】:

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

过滤文件

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

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

【讨论】:

我玩过/打过它。我使用:"lint-staged": "projects/**!(*node_nodules)!(*dist)/*(package-lock).js,ts,json,css,scss,html": ["更漂亮——写“]。 Micromatch 支持很好的数组语法,但不能与 lint-staged 一起使用。 你试过这个github.com/okonet/lint-staged#example-use-your-own-globs 吗? 不,我想把它全部放在 package.json 中。我最终得到了我需要的结果(进一步修改上面的代码)。我发现结果不太好读,感觉有点像正则表达式。我认为旧语法对第一次阅读 package.json 的人来说更明确和更容易理解。 我的最终语法(对于喜欢复制和修改东西的懒惰的人):“projects/!(node_modules|dist)/**/*.js,ts,json,css,scss ,html"【参考方案6】:

可以通过三种方式修复:

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

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

【讨论】:

以上是关于Husky/lint-staged 是不是可以排除/忽略文件?的主要内容,如果未能解决你的问题,请参考以下文章

使用eslint+prettier+husky+lint-staged+commitlint+stylelint规范项目格式

使用 Symfony 自动装配时是不是可以排除多个目录?

Rubocop:是不是可以向 Metrics/AbcSize cop 添加排除项?

SpringMVC 是不是可以配置为处理所有请求,但排除静态内容目录?

使用 Intent.ACTION_PICK 时是不是可以排除 SIM 联系人?

玩! war 命令 - 是不是可以从应用程序 /lib 文件夹中排除某些 jar