Azure Functions(TypeScript)配置OpenTelemetry接入App Insights遇模块找不到错误
问题排查与解决方案
1. 检查导入路径正确性
- 源码中
index.ts导入telemetry.ts时,必须使用同目录相对路径,比如:
避免使用import * as telemetry from './telemetry';src/telemetry这类绝对路径——编译后dist/src下的index.js和telemetry.js处于同一目录,运行时会按编译后的路径解析模块。
2. 修正TypeScript配置(tsconfig.json)
确保关键配置项符合v4模型要求:
rootDir设为源码根目录:"rootDir": "./src"outDir设为编译输出目录:"outDir": "./dist"moduleResolution匹配模块类型:- 若用ES模块(
package.json中"type": "module"),设为"NodeNext"或"Node16" - 若用CommonJS,设为
"Node"
- 若用ES模块(
include包含所有源码文件:"include": ["src/**/*"]
3. 统一模块类型配置
- 若使用ES模块:
- 在
package.json中添加"type": "module" tsconfig.json中"module"设为"ESNext"或"NodeNext"
- 在
- 若使用CommonJS:
- 确保
package.json中无"type": "module"(默认CommonJS) tsconfig.json中"module"设为"CommonJS"- 导入时可改用
require('./telemetry')(或保持import但确保路径正确)
- 确保
4. 验证编译与运行流程
- 每次修改代码后,必须执行
npm run build编译TypeScript,确保dist/src下生成对应.js文件 - 启动函数前,清理旧编译产物:
rm -rf dist && npm run build - 用
func start启动函数,而非直接运行.ts文件
5. 检查Azure Functions运行时配置
local.settings.json中FUNCTIONS_WORKER_RUNTIME必须为node- 确认
NODE_VERSION与本地开发环境一致(推荐Node 18.x/20.x,对应Functions v4运行时) host.json中extension bundle配置正确:"extensionBundle": { "id": "Microsoft.Azure.Functions.ExtensionBundle", "version": "[4.*, 5.0.0)" }
6. OpenTelemetry相关注意事项
- 确保安装的OpenTelemetry包版本兼容当前Node版本,比如:
npm install @opentelemetry/sdk-node @opentelemetry/auto-instrumentations-node - 遥测初始化代码需在函数逻辑前执行,确保
telemetry.ts中的初始化逻辑在导入后立即运行
7. 清理缓存与依赖
- 清理旧依赖和编译产物:
rm -rf node_modules dist package-lock.json npm install npm run build - 重启
func start,避免缓存导致的模块解析异常
内容的提问来源于stack exchange,提问作者Rishabh Dwivedi
相关产品推荐
相关产品推荐

