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

使用--require与ts-node时找不到src/instrumentation.ts模块求助

问题分析与解决方案

你遇到的找不到模块问题,核心源于TypeScript文件预加载机制不兼容、模块系统冲突这两个关键原因,以下是具体修复步骤:

1. Local环境(nodemon + TypeScript)的问题

Node.js和nodemon默认无法直接解析.ts文件,必须先通过TS编译钩子处理。当前local脚本直接用--require加载TS文件,Node会将其当作普通JS文件解析,自然触发模块找不到的错误。

修复方案:
修改package.json的local脚本,先加载ts-node/register钩子来处理TypeScript编译:

"local": "nodemon --require ts-node/register src/instrumentation.ts src/server.ts"

注意:需确保已安装开发依赖:npm install -D ts-node typescript

2. 生产环境(Docker + 编译后的JS)的问题

Docker构建后仍报错,大概率是模块系统不兼容导致:

  • 若你的package.json设置了"type": "module"(ES模块模式),Node的--require是CommonJS专属的预加载机制,两者冲突会导致无法加载ES格式的dist/instrumentation.js。
  • 若TS编译后的模块格式与Node运行模式不匹配(比如TS配置module设为ESNext但Node以CommonJS模式运行),也会触发模块错误。

修复方案:

情况A:项目使用ES模块

将start脚本的--require替换为Node 16.12+支持的--import(ES模块预加载方式):

"start": "node --import dist/instrumentation.js dist/server.js"

同时确保tsconfig.json配置:

{
  "module": "ESNext",
  "moduleResolution": "NodeNext"
}

情况B:项目使用CommonJS模块

确认tsconfig.json的模块配置匹配:

{
  "module": "CommonJS",
  "moduleResolution": "Node"
}

同时检查Docker构建流程,确保src目录完整编译到dist,dist/instrumentation.js文件存在。

3. 额外排查点

  • 禁用FS instrumentation时,确保@opentelemetry/instrumentation-fs已正常安装(通常作为auto-instrumentations-node的依赖自动引入,版本冲突时需手动安装)。
  • 建议给SDK启动添加错误捕获,方便定位问题:
instrumentation.start().catch((err) => {
  console.error('OpenTelemetry SDK初始化失败', err);
});

内容的提问来源于stack exchange,提问作者Jun-Dai Bates-Kobashigawa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:17