【npx】npx lint-staged || exit 1

142 阅读2分钟

pnpm lint-staged
npx lint-staged || exit 1

这两行命令都是用来运行 lint-staged,但使用了不同的工具(pnpmnpx)来执行。它们的含义和区别如下:


第一行:pnpm lint-staged

含义

  • pnpm lint-staged 是通过 pnpm 包管理器执行 lint-staged 命令。
  • lint-staged 是一个工具,用于对 Git 暂存区中的文件运行指定的 linters 或脚本,确保代码在提交之前符合质量标准。

工作流程

  1. pnpm 会查找当前项目中是否安装了 lint-staged(通常在 node_modules/.bin/ 中)。
  2. 如果找到,pnpm 会执行该工具,并使用 package.json.lintstagedrc 中的配置。
  3. 如果没有找到 lint-staged,会报错。

适用场景

  • 适合项目中使用 pnpm 作为包管理器,并且 lint-staged 已安装为开发依赖(devDependencies)。

第二行:npx lint-staged || exit 1

含义

  1. npx lint-staged

    • npx 是一个工具,专门用来临时运行 npm 包。
    • 它会优先检查项目的 node_modules 中是否存在 lint-staged
    • 如果不存在,会尝试从 npm 注册表下载并临时运行。
    • 优点是无需全局安装或确保本地依赖存在。
  2. || exit 1

    • 如果 npx lint-staged 命令失败(退出码非 0),Shell 脚本会立即终止并返回退出码 1
    • 这是为了确保 Git 钩子在代码检查失败时阻止提交。

工作流程

  1. 使用 npx 运行 lint-staged
  2. 如果成功,则继续执行后续命令。
  3. 如果失败(lint-staged 返回非零退出码),终止脚本并返回错误。

适用场景

  • 适合任何包管理器(npmyarnpnpm)或即使项目未安装 lint-staged 也能执行。
  • 更加通用,但依赖于开发者的网络环境,因为临时下载的包可能会增加时间成本。

pnpmnpx 的主要区别

特性pnpm lint-stagednpx lint-staged
依赖安装方式依赖于项目中已安装的 lint-staged可以在未安装时临时下载并运行
执行速度快,直接从本地的 node_modules 中运行慢,如果未安装会临时下载
包管理器依赖需要使用 pnpm 管理依赖独立于包管理器(适用于 npm、yarn、pnpm)
网络依赖不需要额外的网络连接(依赖已安装)可能需要网络连接(如果包未本地安装)
推荐场景项目中明确使用 pnpm,并已安装相关依赖时需要在多种环境中执行,或不确定是否安装依赖时

总结

  • pnpm lint-staged:更快,更适合在明确使用 pnpm 且已安装 lint-staged 的项目中。
  • npx lint-staged:更加通用,适合不依赖特定包管理器的脚本,但可能稍慢。

在实际使用中,如果你的团队或项目统一使用 pnpm,建议使用 pnpm lint-staged;如果需要编写一个跨环境的脚本(如 Husky 钩子),可以选择更通用的 npx lint-staged || exit 1