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

无需NPM构建脚本导入TypeScript模块的报错问题

问题与解决方案:ts-node导入依赖时的模块语法错误

问题场景

我需要导入一个依赖包,其package.json配置如下:

{
  "name": "com.matheusdiasdesouzads.js.language-objects",
  "main": "src/index.ts"
}

在外部包my-outer-package/src/index.ts中,我通过以下方式导入该包:

import {Language} from 'com.matheusdiasdesouzads.js.language-objects';

执行ts-node src/index.ts时出现错误:

> ts-node src/index.ts # my-outer-package
< my-outer-package\node_modules\com.matheusdiasdesouzads.js.language-objects\src\index.ts:1
import Language, {Direction} from './language';
^^^^^^

SyntaxError: Cannot use import statement outside a module

但直接运行ts-node com.matheusdiasdesouzads.js.language-objects/src/index.ts则没有模块相关错误。我尝试了常见方案(设置compilerOptions.module为"CommonJS"、target为"ES2017"、esModuleInterop为true,以及在package.json中加type: "module"),但都无效,想知道能否保持当前依赖配置不变让命令正常运行。

可行解决方案(无需修改依赖包配置)

方案1:让ts-node处理依赖中的TS文件

ts-node默认会跳过node_modules目录下的文件转译,直接把依赖的TS文件当作JS执行,导致ES模块语法报错。可以通过配置tsconfig.json指定需要处理的依赖路径:
在my-outer-package的tsconfig.json中添加:

{
  "ts-node": {
    "include": ["node_modules/com.matheusdiasdesouzads.js.language-objects/**/*.ts"]
  },
  "compilerOptions": {
    // 保留你已有的配置,比如module: "CommonJS"等
  }
}

配置完成后直接运行ts-node src/index.ts即可。

方案2:用路径映射绕开node_modules默认逻辑

在my-outer-package的tsconfig.json中配置路径映射,将包名直接指向其TS源码:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "com.matheusdiasdesouzads.js.language-objects": ["node_modules/com.matheusdiasdesouzads.js.language-objects/src/index.ts"]
    }
  },
  "ts-node": {
    "require": ["tsconfig-paths/register"]
  }
}

先安装依赖:

npm install tsconfig-paths --save-dev

之后正常运行ts-node src/index.ts即可。

方案3:命令行参数强制转译

执行命令时添加参数,强制ts-node转译目标文件及依赖:

ts-node --transpile-only --module CommonJS src/index.ts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:45:33