- Published on
使用 ts-node 直接运行 TypeScript 文件调试
- Authors
- Name
- 不作声
- GitHub
- Github @buzuosheng
应用场景
在日常开发中,我们经常需要编写和运行 TypeScript 脚本。本文将介绍两种主流的方案:使用 ts-node 和 tsx。
使用 ts-node
运行 TypeScript 脚本需要安装 ts-node
,注意这个库需要局部安装:
yarn add -D ts-node typescript @types/node
# 或者
npm install -D ts-node typescript @types/node
配置步骤
- 在
tsconfig.json
中添加以下配置:
{
"compilerOptions": {
"module": "ESNext", // 或 "ES2015"
"moduleResolution": "node", // 必须添加
"esModuleInterop": true
}
}
- 在
package.json
中添加:
{
"type": "module"
}
- 修改导入语句,确保包含文件扩展名:
// ❌ 错误
import data from './data'
// ✅ 正确
import data from './data.js'
运行命令
ts-node --esm ./script.ts
# 或者
node --loader ts-node/esm ./script.ts
使用 tsx(推荐)
tsx 是一个更现代的替代方案,基于 esbuild,提供更快的执行速度:
yarn add -D tsx
# 或者
npm install -D tsx
优势
- 更快的启动速度
- 无需额外配置
- 支持 TypeScript 和 ESM
- 内置 node-fetch 等常用模块
使用方式
tsx ./script.ts
常见问题及解决方案
- 无法使用 import 语句
SyntaxError: Cannot use import statement outside a module
解决:在 package.json
中添加 "type": "module"
- 找不到模块
Error [ERR_MODULE_NOT_FOUND]: Cannot find module
解决:添加文件扩展名(.js 或 .ts)
- TypeScript 文件扩展名报错
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts"
解决:使用正确的命令格式:node --loader ts-node/esm
或直接使用 tsx
- fetch 未定义
ReferenceError: fetch is not defined
解决方案:
# 使用 ts-node 时需要安装
yarn add node-fetch
# 使用 tsx 时已内置,无需安装
性能对比
工具 | 启动时间 | 配置复杂度 | 内存占用 |
---|---|---|---|
ts-node | 1-2s | 需要配置 | 较大 |
tsx | 0.1-0.5s | 零配置 | 较小 |
写在最后
- 对于新项目,推荐使用 tsx,它提供了更好的开发体验和性能
- 遇到问题时,建议优先查看 GitHub Issues,通常能找到最准确的解决方案
- 请确保项目依赖安装在本地,避免使用全局安装导致的版本冲突问题