版本
node:16.14.0
typescript:4.7.3
tsconfig-paths:4.0.0
ts-node:10.8.1
node项目中,需要引用模块,如果没有使用别名,那么将会看到很多类似的引用
import Cartoon from '../../../model/safe/cartoon/db'
非常不友好,很容易出错,既然用到typescript了,那么首先在tsconfig.json文件添加以下配置。
"baseUrl": "./",
"paths": {
"@/*": [
"src/*"
]
},
意思就是凡事以@开头的路径,都会以src下的根目录为路径,ts里别名设置好了,可以去vscode看看
可以看到vscode已经能识别,但是这里仅仅是识别,实际编译后,仍然会出现错误,node还是从@/这个目录下寻找模块的,那怎么可能找得到?
这里就要用到另一个模块了,tsconfig-paths,点击可以查看官方文档,使用起来非常简单。
安装完毕后,修改package.json文件
"scripts": {
"start":"nodemon --exec \"ts-node -r tsconfig-paths/register\" ./src/index.ts"
},
现在就能使用别名路径啦,方便很多。
最后补充一点,如果项目tsc发布成js代码后,在服务器上运行仍会报错,提示找不到模块
Error: Cannot find module '@/model/user/db'
这里就要再安装一个模块module-alias,点击官网。
在package.json引入
"_moduleAliases": {
"@": "./dist"
},
最后在生成的js项目的启动文件中的顶部再引入此模块
require('module-alias/register')
这样代码才能正确运行。