乐闻世界logo
搜索文章和话题

如何在 pnpm 工作区中运行 watch 脚本

6 个月前提问
4 个月前修改
浏览次数67

1个答案

1

pnpm 工作区(workspace)中运行 watch 脚本通常指的是监听多个包(package)中文件的变化,并在变化时执行特定的任务,例如重新编译代码或运行测试。pnpm 是一种包管理工具,它非常适合用在 monorepo 的项目结构中,其中包含多个相互依赖的包。

要在 pnpm 工作区中设置 watch 脚本,你可以遵循以下步骤:

  1. 单个包内设置 watch 脚本:

    首先,确保每个包内部的 package.json 文件都有一个 watch 脚本。例如,如果你使用的是 TypeScript,你可能希望在源代码变化时自动编译它,你可以使用 tsc 命令的 watch 模式:

    json
    { "scripts": { "watch": "tsc --watch" } }
  2. 使用 pnpm 的 -r--recursive 标志:

    要在整个工作区中运行每个包的 watch 脚本,可以使用 pnpm-r--recursive 标志来递归地运行命令。例如:

    sh
    pnpm watch -r
  3. 利用 pnpm 的 pnpm-workspace.yaml 配置文件:

    pnpm 允许你在 pnpm-workspace.yaml 文件中指定工作区的包。确保这个文件在工作区的根目录下,并且配置正确,这样 pnpm 就能知道哪些包是工作区的一部分。

  4. 使用并行或序列执行:

    你可能会希望 watch 脚本并行或序列执行。pnpm 使用以下方式运行脚本:

    • 并行(默认): 如果你希望所有的 watch 脚本同时进行,可以省略 --parallel 标志,因为这是 pnpm -r 命令的默认行为。

    • 序列: 如果你希望依次运行 watch 脚本,可以使用 --serial 标志:

      sh
      pnpm watch -r --serial
  5. 处理输出:

    当你运行多个 watch 脚本时,会有很多日志输出。pnpm 提供了 --filter 标志来限制运行命令的包,这样你可以更好地控制输出。例如,如果你只想运行特定包的 watch 脚本:

    sh
    pnpm watch --filter=specific-package-name
  6. 使用第三方工具:

    如果你需要更复杂的 watch 功能,比如只在依赖性更改时触发重新编译,你可能需要使用第三方工具,如 lernanx,它们提供了更高级的工作区管理功能。

  7. 例子:

    假设你有一个工作区,其中包含两个包:package-apackage-bpackage-a 依赖于 package-b。如果你在 package-b 中进行更改,你希望自动重新编译 package-a。你可以在 package-apackage.json 中设置一个 watch 脚本,该脚本检查 package-b 的变化,并在变化时重新编译 package-a

    package-a/package.json:

    json
    { "scripts": { "watch": "watch 'pnpm build' ../package-b/src" } }

这里的 watch 是一个假设的命令,实际情况中你需要一个真正能够监听文件变化的工具,比如 chokidar-cli

通过遵循这些步骤和考虑这些因素,你可以有效地在 pnpm 工作区中运行 watch 脚本。

2024年6月29日 12:07 回复

你的答案