代码之家  ›  专栏  ›  技术社区  ›  Daniil Andreyevich Baunov

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

  •  3
  • Daniil Andreyevich Baunov  · 技术社区  · 7 年前

    我的想法是 prettier 然后 tslint 使用提交中的所有文件 husky 预提交

    为了使整个项目符合 ,我们决定先跑 更漂亮

    运行后 更漂亮 我们最终要提交400多个文件。所以,跑步的时候 git commit lint-staged 将所有400多个文件作为参数传递给 特斯林特

    最初我们有 特斯林特 作为一个脚本在里面 package.json

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

    配置如下所示:

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

    npm最终在linting阶段出错。输出中未给出错误描述。 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 我们最多只能传递357个文件路径作为参数。

    然而,有趣的是如果我们改变 lint staged 要使用的脚本 特斯林特 直接(没有 npm运行皮棉

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

    此错误与 参数列表太长 不管有多少文件作为参数传递,linting都开始工作,没有任何错误。

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Acorn    7 年前

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

    如果不是这样的话,那么也许你的shell(或者链中的其他工具)有一些人为的,更严格的限制。