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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:50:22