跳到主要内容

ts-node

推荐使用 tsx

ts-node 不支持 watch,默认参数可用性低

npx ts-node main.ts # 直接执行 ts

npm i -D tsconfig-paths
npx ts-node -r tsconfig-paths/register main.ts # tsconfig 里的 path 能生效
node -r ts-node/register -r tsconfig-paths/register main.ts # 使用 node

npx ts-node --showConfig
# --swc 隐含 --transpileOnly
npx ts-node --esm --swc --experimentalSpecifierResolution=node \
run.ts # 约等于 tsx run.ts

tsconfig.json#ts-node

tsconfig.json
{
"extends": "ts-node/node16/tsconfig.json",
// 针对 ts-node 的配置
"ts-node": {
"transpileOnly": true, // 忽略类型检查,更快
"files": true, // 从 tsconfig.json 读取 files, include, exclude
"require": ["tsconfig-paths/register"],
"compilerOptions": {
"module": "commonjs"
}
}
}
{
"ts-node": {
"transpileOnly": true,
"swc": true,
"esm": true,
"experimentalSpecifierResolution": "node"
}
}
envdemo
TS_NODE_COMPILER_OPTIONS{"module":"commonjs"}
TS_NODE_PROJECT./tsconfig.commonjs.json
NODE_OPTIONS--trace-deprecation --abort-on-uncaught-exception

FAQ

Unknown file extension ".ts"

检测在 ts-node 运行

var detectTSNode = false;

try {
if (process[Symbol.for("ts-node.register.instance")]) {
detectTSNode = true;
}
} catch() {
}

swc import assert