git hooks、husky、lint-staged

文章介绍了如何利用git钩子函数,特别是通过husky库在Git的工作流程中设置预提交钩子(pre-commit),配合lint-staged自动执行eslint对.js文件进行格式化修复。husky允许在package.json中配置git钩子,而lint-staged则专注于对暂存区的文件应用特定任务,如ESLint修复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

git钩子函数

husky

安装

使用

前端格式化


git钩子函数

在.git文件夹下的hooks文件中,有下面这些钩子函数,只需要将.sample后缀去除,如下图,在提交代码之前便会执行pre-commit文件。

注意重写该类文件文件的第一行#!/bin/sh不能删除,#!/bin/bash是指此脚本使用/bin/bash来解释执行

husky

通过在package.json文件中配置在git的操作的生命周期里执行命令。

安装

npm install husky

使用

在package.json中添加属性"husky":{"hooks":{"pre-commit":"npm run dev"}},这就代表在提交代码前运行npm run dev这个命令。里面的生命周期钩子和上图中的文件名对应。

通常搭配lint-staged使用。

例如下面安装husky和lint-staged后配置package.json文件如下:

{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "*.js": "eslint --fix"
  }
}

上面表示在commit代码之前自动运行lint-staged对暂存区的js文件用eslint格式化修复。

前端格式化

前端格式化工具使用(eslint、stylelint、prettier、lint-staged和husky搭配格式化代码)_YF-SOD的博客-优快云博客

<think>嗯,用户遇到了一个错误:“Cannot find module 'C:\Dev\aiocloud-vue\node_modules\lint-staged\bin\lint-staged.js'”。我需要分析可能的原因和解决方案。首先,这个错误通常发生在Node.js项目中,当尝试运行某个命令时,所需的模块没有被正确安装。 可能的原因有几个。首先,用户可能没有安装lint-staged,或者安装过程中出现了问题。比如,可能在安装依赖时网络中断,或者权限问题导致模块没有正确安装。其次,node_modules目录可能损坏,需要重新安装。此外,全局安装的模块和项目本地安装的模块可能有冲突,或者package.json中的脚本路径不正确。 接下来,我应该考虑解决步骤。第一步通常是检查是否安装了lint-staged。用户可以通过查看package.json的devDependencies或dependencies部分来确认。如果没安装,需要运行npm install或yarn add来安装。如果已经安装,可能需要删除node_modules和package-lock.json(或yarn.lock)后重新安装依赖,这可以解决依赖损坏的问题。 另外,有时候全局安装的模块会导致问题,特别是如果用户混合使用了全局和本地安装。需要检查是否在项目中正确使用了本地安装的lint-staged,而不是依赖全局版本。还有,用户可能在package.json中配置的脚本路径不正确,比如直接引用了node_modules中的某个路径,而实际上应该使用npx lint-staged或者配置正确的npm脚本。 权限问题也可能导致模块无法访问,特别是在某些系统上,可能需要用管理员权限或调整文件夹权限。此外,缓存问题也可能存在,清除npm或yarn的缓存可能会有帮助。如果项目使用了Monorepo结构,比如Lerna或Yarn Workspaces,可能需要检查子包中的依赖是否正确安装。 最后,如果以上方法都无效,可能需要检查磁盘错误或IDE的缓存问题。比如,VSCode有时会有旧缓存,重启可能解决问题。 总结起来,解决步骤包括:安装依赖、重新安装node_modules、检查脚本配置、处理权限和缓存,以及考虑项目结构的影响。需要逐步排查,确保每个环节都正确无误。</think>以下是解决 `Cannot find module` 错误的完整方案: --- ### 错误现象 ```bash Error: Cannot find module 'C:\Dev\aiocloud-vue\node_modules\lint-staged\bin\lint-staged.js' ``` --- ### 原因分析 1. **依赖未安装**:`lint-staged` 未在项目中正确安装 2. **node_modules 损坏**:依赖安装不完整或文件损坏 3. **路径引用错误**:脚本中使用了错误的路径引用方式 4. **全局/本地冲突**:全局安装与本地安装版本冲突 5. **权限问题**:文件系统权限导致模块不可访问 --- ### 解决方案 #### 第一步:验证依赖状态 ```bash # 查看 package.json 是否包含 lint-staged cat package.json | grep lint-staged # 如果不存在则安装(推荐作为 devDependency) npm install lint-staged --save-dev # 或 yarn add lint-staged -D ``` #### 第二步:清除并重装依赖 ```bash # 删除现有依赖 rm -rf node_modules rm package-lock.json # npm 用户 # 或 rm yarn.lock # yarn 用户 # 全新安装 npm install # 或 yarn install ``` #### 第三步:检查脚本配置 ```json // package.json { "scripts": { // 正确写法 "lint:staged": "lint-staged" // 错误写法(直接引用 node_modules 路径) "lint:staged": "./node_modules/lint-staged/bin/lint-staged.js" } } ``` #### 第四步:处理全局安装冲突 ```bash # 检查全局安装情况 npm list -g lint-staged # 或 yarn global list lint-staged # 如有冲突则卸载全局版本 npm uninstall -g lint-staged # 或 yarn global remove lint-staged ``` #### 第五步:验证文件权限(Windows 特别注意) ```bash # 以管理员身份运行 CMD/PowerShell # 删除 node_modules rd /s /q node_modules # 重置文件权限 takeown /f "C:\Dev\aiocloud-vue" /r /d y icacls "C:\Dev\aiocloud-vue" /reset /t /c /l ``` #### 第六步:缓存清理 ```bash # npm 用户 npm cache clean --force # yarn 用户 yarn cache clean ``` --- ### 进阶排查 #### 1. 查看模块实际路径 ```bash # 检查模块是否真实存在 ls node_modules/lint-staged/bin/lint-staged.js # 或 Windows: dir node_modules\lint-staged\bin\lint-staged.js ``` #### 2. 版本兼容性检查 ```bash npx npm-check -u ``` 确保 `lint-staged` 版本与以下配置兼容: ```json { "lint-staged": "^15.0.2", // 推荐版本 "husky": "^9.0.0" // 如果使用 git hooks } ``` #### 3. Monorepo 项目处理 若为 monorepo 项目,在根目录执行: ```bash npx lerna clean && npx lerna bootstrap # 或 yarn workspaces focus --all ``` --- ### 配置示例 正确的 `.husky/pre-commit` 配置: ```bash #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" npx lint-staged ``` --- ### 常见错误模式对照表 | 错误现象 | 解决方案 | |---------|---------| | `ENOENT: no such file` | 执行完整依赖重装流程 | | `ERR_REQUIRE_ESM` | 在 package.json 添加 `"type": "module"` | | `Command failed with exit code 1` | 检查 Node.js 版本(需 ≥ v16.10) | | `Cannot find configuration file` | 添加 `lint-staged.config.js` 配置文件 | --- ### 预防措施 1. 在 `.gitignore` 中添加: ``` node_modules/ *.lock ``` 2. 使用 [Volta](https://volta.sh/) 管理 Node.js 版本 3. 配置 CI/CD 时添加依赖缓存步骤: ```yaml # GitHub Actions 示例 - name: Cache node_modules uses: actions/cache@v3 with: path: node_modules key: ${{ runner.os }}-modules-${{ hashFiles('**/package-lock.json') }} ``` 如果问题仍未解决,可尝试: ```bash # 强制重建依赖树 npm rebuild # 或 yarn install --force ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值