You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NX无法使用缓存运行根级别prettier脚本问题求助

解决NX Monorepo根级别Prettier脚本缓存配置报错问题

错误原因

运行nx prettier时报错Error: Both project and target have to be specified,是因为NX的nx <target>命令默认要求指定具体项目,你目前仅在nx.json的targetDefaults里定义了prettier的默认配置,没有明确指定执行该目标的项目,也未采用NX支持的根级任务执行方式。

直接跑pnpm prettier能成功,是因为这是直接调用Prettier CLI,完全绕开了NX的任务调度系统,自然不需要指定项目,但也无法利用NX的缓存功能。

可行解决方案

方案1:用nx run-many执行所有项目的Prettier检查

修改package.json里的脚本:

"prettier:nx": "nx run-many --target=prettier --all"

这个命令会遍历仓库内所有项目,执行每个项目的prettier目标(基于nx.json的targetDefaults配置自动继承),同时自动启用NX缓存。

方案2:配置根级项目的Prettier任务

若想直接在根目录执行整个仓库的Prettier检查,需在根目录创建project.json(未存在的话),添加根级任务配置:

{
  "name": "root",
  "targets": {
    "prettier": {
      "executor": "nx:run-commands",
      "options": {
        "command": "prettier --check **/*.{ts,js,cjs,json,yaml}"
      },
      "inputs": ["**/*.{ts,js,cjs,json,yaml}"],
      "outputs": []
    }
  }
}

再修改package.json的脚本:

"prettier:nx": "nx prettier root"

运行pnpm prettier:nx即可执行根项目的prettier任务,同时利用NX缓存。

方案3:用nx exec直接执行命令并启用缓存

最简单的方式是用nx exec包裹Prettier命令,让NX接管缓存逻辑:

"prettier:nx": "nx exec -- prettier --check **/*.{ts,js,cjs,json,yaml}"

这种方式无需额外配置项目或目标,NX会根据nx.json里cacheableOperations中的prettier配置自动处理缓存,效果和直接跑Prettier一致,但能享受到NX的缓存功能。


内容的提问来源于stack exchange,提问作者Tal Rofe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:44:54