gpt4 book ai didi

git - 参数列表太长 - lint-staged -> tslint

转载 作者:太空狗 更新时间:2023-10-29 14:16:37 26 4
gpt4 key购买 nike

在我们的项目中,在将 lint-staged 与 prettier 和 tslint 集成后,我们遇到了一个奇怪的问题。想法是应用 prettier 然后 tslint 使用 husky pre-commit git hook 提交中的所有文件.

为了让整个项目符合prettier描述的新代码样式,我们决定先为整个项目运行prettier,然后提交所有这些带有上述 git 钩子(Hook)的文件。

运行 prettier 后,我们最终提交了 400 多个文件。因此,在运行 git commit lint-staged 时,将所有这 400 多个文件作为参数传递给 prettiertslint 脚本.

最初我们将 tslint 作为 package.json 中的脚本,如下所示:

"lint": "tslint -c tslint.json --project src/tsconfig.json"

lint-staged 配置如下所示:

{
"linters": {
"*.ts": ["prettier --write", "npm run lint", "git add"]
},
"ignore": ["**/*.spec.ts"]
}

当我们运行 git commit 时,npm 在 linting 阶段以错误告终。输出中没有给出错误描述。然后,我们尝试将 lint-staged 提供给我们的所有文件路径复制到终端中,并使用所有这些文件路径手动运行 npm run lint

我们说的错误是 Argument list too long

sh: /path-to-app/node_modules/.bin/tslint: Argument list too long
npm ERR! code ELIFECYCLE
npm ERR! errno 126

通过进一步的试验,我们发现可以接受且没有任何错误的最大文件路径数是 357。因此,当我们通过 npm run lint 运行 linting 脚本时,我们只能通过最多 357 个文件路径作为参数。

但是,有趣的是,如果我们将 lint staged 脚本更改为立即使用 tslint(无需 npm run lint):

{
"linters": {
"*.ts": ["prettier --write", "tslint -c tslint.json --project src/tsconfig.json", "git add"]
},
"ignore": ["**/*.spec.ts"]
}

Argument list too long 的错误消失了,linting 开始正常工作 - 无论有多少文件作为参数传递。

这样,问题本身就解决了。但问题仍然存在——这种行为的原因是什么?基本上,当使用 npm run 运行脚本时,我们可以传递有限数量的参数,否则 - 无论有多少参数都不会出现问题。

最佳答案

可以传递给新进程的参数和环境变量的数量是有限制的。这些限制来自内核本身。

但是,如果您使用的是现代 Linux x86_64(可能),这应该不是问题;当然不是只有 357 个参数。

现在,单个参数的长度不能超过 128 KiB。如果您在单个字符串中传递所有参数(算作单个参数),如果每个路径都非常大(每个大约 350 个字符),您可能会达到限制。

如果情况并非如此,那么您的 shell(或链中的其他一些工具)可能有一些人为的、更严格的限制。

关于git - 参数列表太长 - lint-staged -> tslint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com