添加AWS库后Temporalio出现ActivityHeartbeat命名重复错误求助
解决Temporalio与AWS相关库冲突导致的
duplicate name 'ActivityHeartbeat' in Namespace coresdk错误 问题描述
我们项目使用Temporalio库,添加AWS相关库后,启动服务器或运行单元测试时触发错误:duplicate name 'ActivityHeartbeat' in Namespace coresdk。
曾怀疑是版本或库冲突,尝试统一所有库版本后问题仍未解决;运行使用Temporalio的特定测试时也会出现相同错误,目前不清楚问题原因及解决办法。
启动服务器时的错误栈
node_modules/protobufjs/src/namespace.js:239 throw Error("duplicate name '" + object.name + "' in " + this); ^ Error: duplicate name 'ActivityHeartbeat' in Namespace coresdk at Namespace.add (node_modules/protobufjs/src/namespace.js:239:23) at Root.add (node_modules/protobufjs/src/namespace.js:232:28) at Root.addJSON (node_modules/protobufjs/src/namespace.js:172:16) at Object.<anonymous> (node_modules/@temporalio/proto/protos/json-module.js:7:2) at Module._compile (node:internal/modules/cjs/loader:1256:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1310:10) at Module.load (node:internal/modules/cjs/loader:1119:32) at Function.Module._load (node:internal/modules/cjs/loader:960:12) at Module.require (node:internal/modules/cjs/loader:1143:19) at Module.Hook.Module.require (api/node_modules/dd-trace/packages/dd-trace/src/ritm.js:85:33)
运行测试时的错误栈
duplicate name 'ActivityHeartbeat' in Namespace coresdk 3 | const sdk = getTracerSdk(); 4 | > 5 | import { | ^ 6 | Client, 7 | Connection, 8 | DataConverter, at Namespace.add (../node_modules/protobufjs/src/namespace.js:239:23) at Root.add (../node_modules/protobufjs/src/namespace.js:232:28) at Root.addJSON (../node_modules/protobufjs/src/namespace.js:172:16) at Object.<anonymous> (../node_modules/@temporalio/proto/protos/json-module.js:7:2) at Object.<anonymous> (../node_modules/@temporalio/proto/protos/root.js:8:23) at Object.<anonymous> (../node_modules/@temporalio/proto/protos/index.js:1:120) at Object.<anonymous> (../node_modules/@temporalio/client/src/types.ts:3:1) at Object.<anonymous> (../node_modules/@temporalio/client/src/connection.ts:11:1) at Object.<anonymous> (../node_modules/@temporalio/client/src/base-client.ts:6:1) at Object.<anonymous> (../node_modules/@temporalio/client/src/async-completion-client.ts:10:1) at Object.<anonymous> (../node_modules/@temporalio/client/src/index.ts:30:1)
可能的解决思路
- 检查依赖冲突:执行
npm ls protobufjs查看项目中所有依赖的protobufjs版本,确认是否存在多版本共存。部分AWS库可能内置了与Temporalio冲突的proto定义或protobufjs版本,导致加载时重复注册ActivityHeartbeat。 - 强制统一protobufjs版本:在
package.json中使用overrides字段(npm)或resolutions字段(yarn),强制所有依赖使用Temporalio指定的protobufjs版本。比如:
(版本号以"overrides": { "protobufjs": "~7.2.5" }@temporalio/proto的package.json中依赖的protobufjs版本为准) - 排查模块重复加载:启动服务或测试时添加
--trace-module-resolution参数,追踪@temporalio/proto和AWS相关库的proto文件加载路径,确认是否有重复加载相同定义的情况。 - 调整导入顺序:测试文件中先导入了追踪SDK,再导入Temporalio模块,可能导致依赖加载顺序异常。尝试将Temporalio的导入语句移到追踪SDK之前。
- 清理依赖缓存:删除
node_modules、package-lock.json(或yarn.lock),重新执行npm install(或yarn install),排除缓存导致的依赖异常。
内容的提问来源于stack exchange,提问作者novac
相关产品推荐
相关产品推荐

