【问题标题】:npm pre commit not workingnpm 预提交不起作用
【发布时间】:2017-08-09 09:59:36
【问题描述】:

我正在使用 npm precommit 钩子,但它没有停止有问题要提交的文件,也没有在我尝试提交文件时收到“Pre commit checks”消息。

Package Json:
{
  "name": "myfolder",
  "version": "1.0.0",
  "description": "",
  "main": "",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 0",
    "precommit-msg": "echo 'Pre-commit checks...' && exit 0",
    "lint": "csslint global/css"
  },
  "author": "SR",
  "license": "ISC",
  "dependencies": {
    "csslint": "^1.0.4",
    "jshint": "^2.9.4",
    "pre-commit": "^1.2.2"
  },
  "pre-commit": [
    "precommit-msg",
    "lint"
  ],
  "devDependencies": {
    "pre-commit": "^1.2.2"
  }
}

【问题讨论】:

  • 我有同样的问题,仍在寻找解决方案。

标签: npm pre-commit-hook


【解决方案1】:

请确保您的“package.json”文件位于“.git”文件夹所在的同一文件夹中(初始化 git 存储库的位置)。当你安装 'pre-commit' 包时,'pre-commit' 文件应该出现在 '.git/hooks/' 下。

【讨论】:

  • 如果package.json 文件和.git 不在同一级别怎么办?
  • @GauravGoel, husky 处理这种情况并不复杂。
【解决方案2】:

仅供参考,我遇到了这个问题,因为 hooks 文件夹中缺少 pre-commit 文件。

运行npm i pre-commit --save-dev 再次创建文件并为我解决。

【讨论】:

    【解决方案3】:

    没有设法用几个“预提交” NPM 模块(@fastify/pre-commit、monorepo-staged-precommit)来实现它,所以通过将 tools/pre-commit.sh 文件添加到 repo 中来“手动”实现它,内容如下:

    #!/bin/sh
    DIR='web'
    echo "Pre-commit actions (NPM tests for $DIR)..."
    cd $DIR && npm run test
    

    并更新package.json

    "scripts": {
       "test",
       "install-precommit": "cp ../tools/pre-commit.sh ../.git/hooks/pre-commit"
    

    这个解决方案有一些限制(比如自动安装需要在“README”中的某个地方询问npm run install-precommit,我不确定它在 Windows 上如何工作,尤其是在没有 Git Bash 的情况下)但它对我有用。

    注意事项:

    • 其他预提交 NPM 包要么不能正常工作,要么要求 NVM 和其他额外工具,我不希望开发人员为这样的小任务安装这些工具。
    • pre-commit.sh 可能有任何名称并且不可执行 - “install-precommit” 任务和 git 关心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 2021-11-10
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多