ts-node不支持alias,编译报错

在koa+ts项目中,配置tsconfig使其IDE支持快速跳转,但是用tsnode编译时报错

代码如下

import {add} from '@/lib'

const output = 'Hello World'

console.log(output)

console.log(add(1, 2))
复制代码

但是编译时报错:Error: Cannot find module ‘@/lib’。

在 tsconfig.json 里定义的 @ 别名,ts-node 根本不鸟你。所以我们怀疑 ts-node 没有识别 tsconfig.json。查了一圈发现这个 stackoverflow.com/questions/5…

ts-node 7.0.0 以上就不自动识别 tsconfig.json 了,得加上 --files 才能识别,好吧。

ts-node ./src/main.ts --files

结果还是报错

真正使用你的别名

按照 stackoverflow 上的提示肯定是可以识别 tsconfig.json 的,所以这里我的猜想是 ts-node 不支持alias,毕竟这玩竟其实属于 webpack。查了一下,果然。

github.com/TypeStrong/… 这个 Issue 就说明了我们刚刚遇到了不能使用 alias 的问题。解决方案是我们得再装一个 tsconfig-paths 的包。没办法.

npm i -D tsconfig-paths

ts-node -r tsconfig-paths/register ./src/main.ts --files
复制代码

总算是成功了。

使用vscode的调试工具

参考:www.barretlee.com/blog/2019/0…

// launch.json配置
"runtimeExecutable": "/usr/local/bin/nodemon",
"runtimeArgs": [
    "--exec",
    "ts-node",
    "-r",
    "tsconfig-paths/register",
    "--files"
],
"program": "${workspaceFolder}/src/main.ts",
复制代码

以上配置相当于执行了

[nodemon] starting `ts-node -r tsconfig-paths/register --files ./src/main.ts`
复制代码

如果文件地址是通过args传入的

// launch.json配置
"runtimeExecutable": "/usr/local/bin/nodemon",
"runtimeArgs": [
    "--exec",
    "ts-node",
    "-r",
    "tsconfig-paths/register",
    "--files"
],
"args": ["${workspaceFolder}/src/main.ts"],
复制代码

以上配置相当于执行了

[nodemon] starting `ts-node -r tsconfig-paths/register --files /Users/xxx/xxx/src/main.ts`
复制代码

可以看到,地址变成了绝对路径

总结

使用 ts-node 的时候要添加 –files 去识别你的 tsconfig.json 文件
安装 tsconfig-paths 这个包来使用路径别名 alias

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享