NX monorepo自动发布失败:nx-semantic-release插件analyzeCommits报错
NX Monorepo + nx-semantic-release 栈溢出问题解决
我在NX monorepo中搭建了基于GitHub Action的自动版本发布工作流,使用nx-semantic-release包管理版本,但执行时触发栈溢出错误,具体报错如下:
[10:10:33 AM] [semantic-release] › ✖ Failed step "analyzeCommits" of plugin "[Function: nx-semantic-release]" [10:10:33 AM] [semantic-release] › ✖ An error occurred while running semantic-release: RangeError: Maximum call stack size exceeded at Function.from (<anonymous>) at Object.purry (/home/runner/work/andika/andika/node_modules/remeda/dist/commonjs/purry.js:43:27) at filter (/home/runner/work/andika/andika/node_modules/remeda/dist/commonjs/filter.js:8:20) at getRecursiveDependencies (/home/runner/work/andika/andika/node_modules/@theunderscorer/nx-semantic-release/src/common/project.js:31:57) at /home/runner/work/andika/andika/node_modules/@theunderscorer/nx-semantic-release/src/common/project.js:32:65 at Array.reduce (<anonymous>) at /home/runner/work/andika/andika/node_modules/@theunderscorer/nx-semantic-release/src/common/project.js:31:199 at pipe (/home/runner/work/andika/andika/node_modules/remeda/dist/commonjs/pipe.js:27:19) at getRecursiveDependencies (/home/runner/work/andika/andika/node_modules/@theunderscorer/nx-semantic-release/src/common/project.js:31:30) at /home/runner/work/andika/andika/node_modules/@theunderscorer/nx-semantic-release/src/common/project.js:32:65 { pluginName: '[Function: nx-semantic-release]' } > NX Maximum call stack size exceeded Pass --verbose to see the stacktrace.
解决方法
排查循环依赖
报错栈指向getRecursiveDependencies函数,说明递归解析项目依赖时触发了无限循环,大概率是monorepo中存在循环依赖(如项目A依赖B,B反向依赖A)。用NX命令可视化依赖关系:nx dep-graph --focus <目标项目名>找到循环依赖的项目对,调整依赖结构,移除循环引用。
升级nx-semantic-release包
旧版本的包可能存在递归处理的bug,更新到最新稳定版:npm install @theunderscorer/nx-semantic-release@latest --save-dev同时可查看该包的GitHub Issues,确认是否有同类问题已被修复。
调整nx-semantic-release配置
如果暂时无法移除循环依赖,可在配置中指定具体发布项目,跳过全量依赖递归扫描:// semantic-release.config.js module.exports = { plugins: [ [ '@theunderscorer/nx-semantic-release', { projects: ['your-target-project'], // 仅指定需要发布的项目 skipDependencies: true // 部分版本支持跳过依赖解析,需参考官方文档 } ] ] };检查NX workspace配置
确认nx.json中的targetDependencies等依赖相关配置是否合理,避免错误的依赖指向触发意外的递归扫描。
内容的提问来源于stack exchange,提问作者Philip Mutua
相关产品推荐
相关产品推荐

