Husky + lint-staged 在 Windows 上不起作用找不到命令

问题描述

我似乎无法让 huskylint-staged 在我的 Windows 10 机器上工作。

目前我的设置如下:

.huskyrc.json

{
  "hooks": {
    "pre-commit": "lint-staged"
  }
}

.lintstagedrc(尽管这里的内容似乎无关紧要,因为问题似乎在读取此文件之前就发生了)

{
  "**/*.+(js|md)": [
    "prettier --write","eslint --fix src/","git add"
  ]
}

package.json

  "scripts": {
    "start": "react-scripts start","build": "react-scripts build","test": "react-scripts test --watchAll=false","eject": "react-scripts eject","lint": "eslint .","lint-fix": "eslint . --fix"
  },...
  "devDependencies": {
    ...
    "husky": "^4.3.0","lint-staged": "^10.5.4",...
  }

我使用的是 npm 版本 6.14.11 和节点版本 14.15.1。

现在,当我在控制台中输入 git add .git commit -m "test" 时,结果如下:

husky > pre-commit (node v14.15.1)
C:\Program Files\nodejs/node_modules/node/bin/node: line 1: This: command not found
husky > pre-commit hook Failed (add --no-verify to bypass)

这似乎只发生在我的 Windows 机器上,在 Ubuntu 上似乎不是问题。这里会发生什么?

解决方法

如果您在本地安装了 lint-staged,那么您需要在 lint-staged 前面加上路径。

.huskyrc.json

{
  "hooks": {
    "pre-commit": "./node_modules/.bin/lint-staged"
  }
}

另一种方法是将脚本添加到运行 lint-stagedpackage.json

package.json

{
  "scripts": {
    "lint-staged": "lint-staged"
  }
}

然后修改您的 pre-commit 钩子。

.huskyrc.json

{
  "hooks": {
    "pre-commit": "npm lint-staged"
  }
}

当然,您也可以选择全局安装 lint-staged,在这种情况下,您不需要进行任何更改。只需运行:npm install -g lint-staged