ts-node不支持alias,編譯報錯

錯誤

在koa+ts項目中,配置tsconfig使其IDE支持快速跳轉,可是用tsnode編譯時報錯node

代碼以下webpack

import {add} from '@/lib'

const output = 'Hello World'

console.log(output)

console.log(add(1, 2))
複製代碼

可是編譯時報錯:Error: Cannot find module '@/lib'。git

解決

在 tsconfig.json 裏定義的 @ 別名,ts-node 根本不鳥你。因此咱們懷疑 ts-node 沒有識別 tsconfig.json。查了一圈發現這個 stackoverflow.com/questions/5…github

ts-node 7.0.0 以上就不自動識別 tsconfig.json 了,得加上 --files 才能識別,好吧。web

運行 ts-node ./src/main.ts --filesnpm

結果仍是報錯json

真正使用你的別名

按照 stackoverflow 上的提示確定是能夠識別 tsconfig.json 的,因此這裏個人猜測是 ts-node 不支持alias,畢竟這玩竟其實屬於 webpack。查了一下,果真。markdown

github.com/TypeStrong/… 這個 Issue 就說明了咱們剛剛遇到了不能使用 alias 的問題。解決方案是咱們得再裝一個 tsconfig-paths 的包。app

npm i -D tsconfig-paths

ts-node -r tsconfig-paths/register ./src/main.ts --files
複製代碼

總算是成功了。koa

使用vscode的調試工具

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

program指定入口文件

// 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

相關文章
相關標籤/搜索