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

如何修改definitions的tsconfig解决ERR_REQUIRE_ESM错误?

解决Monorepo中definitions包导致的ERR_REQUIRE_ESM错误

场景概述

采用Monorepo架构,将类型/定义文件放在独立的definitions包中供前端、后端共享,目录结构如下:

.
├── frontend
├── backend/
│   └── indexes/
│       └── create-indexes.ts
├── tsconfig.json
└── definitions/
    ├── index.ts
    └── tsconfig.json

当前配置

definitions包的tsconfig

{
  "compilerOptions": {
    "module": "commonJs",
    "lib": ["es6"],
    "noImplicitAny": true,
    "noImplicitThis": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "baseUrl": "../",
    "types": [],
    "noEmit": true,
    "forceConsistentCasingInFileNames": true
  },
  "files": ["index.ts"]
}

后端的tsconfig

{
  "compilerOptions": {
    "preserveConstEnums": true,
    "strictNullChecks": true,
    "sourceMap": true,
    "allowJs": true,
    "target": "es2017",
    "outDir": ".build",
    "moduleResolution": "node",
    "lib": ["es2020"],
    "rootDir": "./",
    "allowSyntheticDefaultImports": true,
    "module": "commonjs",
    "esModuleInterop": true
  }
}

问题描述

运行backend/indexes/create-indexes.ts脚本时触发ERR_REQUIRE_ESM错误,提示Utils和Telegram文件使用了require语法,但实际代码中均采用ES模块的import语法:

import { 2 } from 'definitions';
import * as xyz from 'definitions';
import { 1, 2 } from 'definitions';

要求仅修改definitions包的tsconfig解决问题,后端配置保持不变。

解决方案

修改definitions包的tsconfig,调整以下关键配置:

  • 移除noEmit: true,需要生成符合CommonJS规范的输出文件供后端识别
  • 添加declaration: true,生成类型声明文件,不影响其他包的类型提示
  • 设置outDir指定输出目录(比如./dist),避免源码和编译文件混放
  • 调整baseUrl为当前目录(./),避免路径解析混乱
  • 可选添加declarationDir指定类型声明输出目录,保持结构清晰

修改后的definitions/tsconfig.json如下:

{
  "compilerOptions": {
    "module": "commonjs",
    "lib": ["es6"],
    "noImplicitAny": true,
    "noImplicitThis": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    "baseUrl": "./",
    "types": [],
    "forceConsistentCasingInFileNames": true,
    "declaration": true,
    "outDir": "./dist",
    "declarationDir": "./dist"
  },
  "files": ["index.ts"]
}

补充操作

修改后在definitions包根目录执行tsc编译,生成dist目录下的CommonJS模块文件和类型声明。同时建议在definitions/package.json中设置:

{
  "main": "dist/index.js",
  "types": "dist/index.d.ts"
}

这样后端导入definitions时无需修改路径,直接识别编译后的文件。

内容的提问来源于stack exchange,提问作者Amr Shawki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:35:18