项目重新安装依赖以后,突然无法重新提交代码了, 纳尼!!!!
基础环境
makefile
node: 14.21.3
"lint-staged": "^13.2.2"
报错信息
shell
[0;32m ******* pre-commit 钩子触发 **************[0m
file:///D:/projects/carbon-credit/node_modules/listr2/dist/index.js:206
this.options.fields ??= {};
^^^
SyntaxError: Unexpected token '??='
at Loader.moduleStrategy (internal/modules/esm/translators.js:149:18)
husky - pre-commit hook exited with code 1 (error)
从报错结果分析, 是配置了 pre-commit 钩子,执行了什么动作, 然后提示,无法提交 commit 信息
.husky/pre-commit
bash
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
echo ''
echo -e "\e[0;32m ******* pre-commit 钩子触发 **************\e[0m"
echo ''
npx --no-install lint-staged
这里执行了 lint-staged
分析过程
- 查看是哪个包依赖了
listr2
, 不是直接从node_modules 里面搜搜, 看lock文件
- 之前是好的, 说明一定是因为某个环境的变化导致了这个问题的发生。
既然定位到了 lint-staged , 则猜测,是 lint-staged 依赖 listr2, 然后 listr2 包语法发生了变化,导致不兼容
查看 lint-staged 的 issue-1315 , 找到类似答案。 node 版本必须为 16 + 才行。
nvm
切换node 版本为 16.20.2
再次提交代码 git commit -m 'feat: 初始化项目'
可以了~
解决办法
- 方式1: node 升级到16
- 方式2: 公司业务环境限制,无法升级到node 16+的, 降级lint-staged 从
13.2.2
到13.2.0