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

如何在ESM模式下本地运行带路径别名的Next.js任务?

解决ESM模式下Next.js项目脚本的路径别名问题

核心问题分析

你的tsconfig.json中paths配置与baseUrl存在冲突,加上ts-node/tsx在ESM模式下对路径别名的处理需要特殊配置,导致无法找到@/server模块。而Next.js的next dev自带bundler,会自动解析paths配置,因此能正常运行。

具体修复步骤

1. 修正tsconfig的paths映射

你的baseUrl已设为./src,意味着所有相对路径都会从src目录开始查找。原来的paths配置将@/*指向src/*,会导致实际路径变成src/src/*,这是错误的。修改如下:

{
  "compilerOptions": {
    // ... 其他配置保留不变
    "paths": {
      "@/*": ["*"] // 改为映射到baseUrl目录下的所有文件
    },
  }
}

2. 调整ts-node的ESM路径解析配置

tsconfig-paths/register是CommonJS环境的注册器,在ESM模式下需改用ESM版本的注册器:

  • 方式一:修改tsconfig.json里的ts-node配置:
"ts-node": {
  "esm": true,
  "experimentalSpecifierResolution": "node",
  "require": ["tsconfig-paths/esm/register"] // 替换为ESM版本注册器
}
  • 方式二:直接在运行命令中指定:
npx ts-node -r tsconfig-paths/esm/register -T src/server/jobs/index.ts

3. 解决tsx的静默失败问题

tsx需要显式加载ESM版本的路径解析器,运行命令改为:

npx tsx --loader tsconfig-paths/esm/register src/server/jobs/index.ts

也可以在package.json中添加便捷脚本:

"scripts": {
  "run:summary-job": "tsx --loader tsconfig-paths/esm/register src/server/jobs/index.ts"
}

4. 确保ESM模式配置正确

检查package.json是否添加以下配置,保证Node.js按ESM模式处理文件:

"type": "module"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 01:52:49