新 husky 的另一个变化是它不再自动安装 Git 挂钩。
相反,推荐的新方法是在 package.json 中有一个 prepare
1 脚本:
{
"prepare": "husky install"
}
让我们看看为什么。
包管理器最佳实践
多年来,包管理器不鼓励将后安装用于编译以外的任何事情。
通过删除自动安装,新的 husky 是一个更好的公民,也是第一个支持 Yarn 2 零安装的版本(之前,它需要被拔掉)。
来自 npm 文档:最佳实践
“您几乎不必显式设置预安装或安装脚本。如果您这样做,请考虑是否有其他选择。安装或预安装脚本的唯一有效用途是编译”
来自 Yarn 2 文档:关于后安装的说明
“后安装脚本会对您的用户产生非常实际的影响…要点是我们认为后安装脚本不是一个可行的解决方案”
自动安装的最新问题
随着最近包管理器的改进(npm 7、Yarn 2),用户开始对 husky 4 自动安装问题进行复杂的调试。
它变得不那么可靠了:为了提供更快的安装,包管理器使用缓存(这非常好)。
因此,husky 4 后安装脚本现在并不总是运行。
例如,如果由于某些原因 husky 4 第一次安装失败,由于缓存,重新运行 npm install 将无法正常工作。
不再有输出:包管理器现在隐藏后安装输出。
没有更多确认已安装挂钩或信息消息来帮助用户调试问题。
这可能看起来不多,但在开源项目中,具有不同经验的用户可能会克隆一个项目。因此,拥有某种信息消息很重要。尤其是对于像 husky 这样具有很大副作用(更改 Git 钩子)的工具。
如果您认为后安装应该只用于编译,那么这些行为(一次性后安装,没有输出)是有意义的。
结论
husky 将自动安装降至:
- 遵循包管理器的最佳实践和演变
- 更加可靠和可预测
- 为具有不同经验的人保留用户友好的消息
Yarn 2 有一个例外。 ↩︎