如何配置Nx将dist目录生成在工作区根目录而非项目内
Nx Monorepo构建产物路径配置问题
错误信息
NX Running target serve for project graphql-api and 1 task it depends on: ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— > nx run graphql-api:build:production > nx run graphql-api:serve:development NX Nx Daemon is not enabled. Assets will not be updated when they are changed. [ watch ] build succeeded, watching for changes... C:\Users\asfat\projects\web\man-cog-full-poc\manulife\node_modules\@nx\js\src\executors\node\node.impl.js:313 throw new Error(`Could not find ${fileToRun}. Make sure your build succeeded.`); ^ Error: Could not find C:\Users\asfat\projects\web\man-cog-full-poc\manulife\dist\packages\graphql-api\main.js. Make sure your build succeeded. at fileToRunCorrectPath (C:\Users\asfat\projects\web\man-cog-full-poc\manulife\node_modules\@nx\js\src\executors\node\node.impl.js:313:11) at C:\Users\asfat\projects\web\man-cog-full-poc\manulife\node_modules\@nx\js\src\executors\node\node.impl.js:99:49 at new Promise (<anonymous>) at Object.start (C:\Users\asfat\projects\web\man-cog-full-poc\manulife\node_modules\@nx\js\src\executors\node\node.impl.js:93:36) at async Timeout.processQueue [as _onTimeout] (C:\Users\asfat\projects\web\man-cog-full-poc\manulife\node_modules\@nx\js\src\executors\node\node.impl.js:64:13) Node.js v20.12.2
问题详情
使用Nx构建项目时,dist目录被创建在项目文件夹内(如packages/graphql-api/dist),需要将dist目录生成在工作区根目录(如dist/graphql-api)。
配置信息
当前project.json配置:
{ "projects": { "graphql-api": { "root": "packages/graphql-api", "sourceRoot": "packages/graphql-api/src", "projectType": "application", "architect": { "build": { "builder": "@nrwl/node:build", "options": { "outputPath": "dist/graphql-api", // 期望的输出路径 "main": "packages/graphql-api/src/main.ts", "tsConfig": "packages/graphql-api/tsconfig.app.json", "assets": [] } }, "serve": { "builder": "@nrwl/node:execute", "options": { "buildTarget": "graphql-api:build" } } } } } }
当前问题
尽管将outputPath设置为dist/packages/graphql-api,Nx仍在项目文件夹内生成dist目录,构建产物被放在packages/graphql-api/dist而非dist/packages/graphql-api。
已尝试操作
- 执行
nx build graphql-api重新构建项目 - 验证
outputPath配置
解决方法
1. 修改outputPath为工作区根相对路径
Nx中outputPath默认是相对于项目root的路径,因此需要显式指定相对于工作区根的路径:
方式一:使用相对路径(根据项目层级调整)
将build的outputPath修改为:"outputPath": "../../dist/graphql-api"(因为项目root是
packages/graphql-api,往上两级即为工作区根目录)方式二:使用Nx内置变量(推荐,不受项目层级影响)
使用{workspaceRoot}变量直接指向工作区根:"outputPath": "{workspaceRoot}/dist/graphql-api"
2. 清理缓存并重新构建
修改配置后,清除Nx缓存并重新构建:
nx reset nx build graphql-api
疑问解答
如何配置Nx将dist目录生成在工作区根目录?
通过上述修改outputPath为工作区根相对路径或使用{workspaceRoot}变量即可实现。是否有特定设置或配置项被遗漏以确保构建产物放在根目录?
核心遗漏点是Nx默认outputPath的相对基准是项目root而非工作区根,因此需要显式指定相对于工作区的路径,或使用Nx提供的工作区变量来避免路径层级问题。
内容的提问来源于stack exchange,提问作者Asfath Ahamed
相关产品推荐
相关产品推荐

