当前位置: 首页 > 知识库问答 >
问题:

javascript - pre-commit钩子不触发如何解决?

樊令秋
2024-03-23

使用了pre-commit这个库,想在commit之前检查文件,结果git commit之后,脚本根本不执行,请问是什么原因?

"pre-commit" 配置的 ["echo", "check"] 未触发
package.json配置

{  "name": "test",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1",    "check": "node ./config/check.js",    "echo": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1"  },  "pre-commit": ["echo", "check"],  "author": "",  "license": "ISC",  "dependencies": {    "@svgdotjs/svg.draggable.js": "^3.0.3",    "@svgdotjs/svg.js": "^3.2.0"  },  "devDependencies": {    "pre-commit": "^1.2.2"  }}

共有1个答案

吴修洁
2024-03-23

pre-commit钩子不触发可能是由于以下几个原因:

  1. 未正确安装 pre-commit 钩子:确保你在项目的根目录下运行了pre-commit install命令,以安装 pre-commit 钩子。
  2. pre-commit 配置错误:在package.json中,pre-commit字段应该是一个数组,数组中的元素应该是要执行的脚本的名称。但是,在你的配置中,pre-commit字段的值是一个字符串数组,而不是一个脚本名称数组。你应该将pre-commit字段的值更改为一个包含脚本名称的数组,例如["check"],或者如果你想要按顺序执行多个脚本,你可以使用&&来连接它们,例如["echo && check"]
  3. git 提交时未触发钩子:确保你在提交时使用了git commit命令,而不是git commit --no-verify命令。--no-verify选项会跳过所有的提交前钩子。

根据你的package.json配置,你可以尝试将pre-commit字段的值更改为["check"],然后再次尝试提交。这将只执行check脚本。如果你还希望echo脚本在check脚本之前执行,并且如果echo脚本失败(返回非零退出码)则不执行check脚本,你可以使用&&来连接它们,如下所示:

{  "name": "test",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1",    "check": "node ./config/check.js",    "echo": "echo \"Error: I SHOULD FAIL LOLOLOLOLOL \" && exit 1",    "pre-commit": "echo && check"  },  "author": "",  "license": "ISC",  "dependencies": {    "@svgdotjs/svg.draggable.js": "^3.0.3",    "@svgdotjs/svg.js": "^3.2.0"  },  "devDependencies": {    "pre-commit": "^1.2.2"  }}

然后,运行pre-commit install来重新安装钩子。现在,当你运行git commit时,echo脚本将首先执行,如果它成功(返回零退出码),则check脚本将执行。如果echo脚本失败(返回非零退出码),则check脚本将不会执行,并且git提交将被中止。

 类似资料:
  • pre-commit是用于管理和维护多语言预提交Hook的框架 在提交代码审查之前,Git钩子脚本可用于识别简单问题。我们在每次提交时运行我们的钩子,以自动指出代码中的问题,例如缺少分号、尾随空格和调试语句。通过在代码审查之前指出这些问题,这允许代码审查者专注于变更的体系结构,同时不会浪费时间与琐碎的样式挑剔。 当我们创建更多的库和项目时,我们认识到跨项目共享我们的预提交钩子是痛苦的。我们从项目到

  • You can use Prettier with a pre-commit tool. This can re-format your files that are marked as "staged" via git add before you commit. Option 1. lint-staged Use Case: Useful for when you want to use ot

  • 主要内容:JAVA钩子OrientDB钩子类似于数据库术语中的触发器,它在用户应用程序中的每个CRUD操作之前和之后启用内部事件。可以使用挂钩编写自定义验证规则,强制执行安全性,或安排外部事件,例如针对关系DBMS进行复制。 OrientDB支持两种钩子 - 动态钩子 - 触发器,可以在类级别和/或文档级别构建。 Java(Native)钩子 - 触发器,可以使用Java类构建。 动态钩子 动态钩子比Java钩子更灵活

  • 我试图在我的自定义模块中添加一个钩子,但在我在prestashop backoffice或使用webservice添加一个客户后,它不会被触发。 我试图注册的钩子名称是“actionCustomerAccountAdd”。 这是模块的相关代码。你能帮我吗?我是一名PHP开发人员,但这是我第一次在Prestashop端进行开发。 我有此代码来签入日志文件或页面,但它没有被激发: 非常感谢。

  • 通过ai问答vscode,实现打开文件后触发和切换标签页触发弹出消息框,根据ai提供的代码编写,但是没有达到期望效果,期望效果是vscode打开文件后,切换标签,弹出消息框,显示设置的内容 初次进行vscode 插件开发尝试,先从实现打开文件后触发和切换标签页触发弹出消息框开始,通过chat的ai问答得知可以通过onDidChangeActiveTextEditor和onDidOpenTextDo

  • 问题内容: 我正在尝试使用Jenkins,docker和Ansible实现CI / CD管道。我 正在为版本控制系统使用SVN代码存储库。对于部署和 SVN代码存储库,我使用的是AWS EC2。部署和代码存储库位于单独的VM中。 我的要求 将代码提交到SVN存储库中时,需要触发一个 Jenkins Job。该工作将被称为ansible playbook,稍后将构建 项目,构建Docker映像并部署