NestJS使用ts-migrate-mongoose时绝对路径导入失败问题求助
解决NestJS + ts-migrate-mongoose迁移文件绝对路径导入问题
以下是几个无需移除项目中绝对路径的可行方案:
方案1:给迁移文件单独配置tsconfig
在项目根目录的migrations文件夹下创建tsconfig.migrations.json,内容如下:
{ "extends": "../tsconfig.json", "compilerOptions": { "baseUrl": "../", "outDir": "../dist/migrations" }, "include": ["../src/**/*.ts", "./**/*.ts"] }
修改迁移执行命令,指定使用这个配置文件:
ts-node -P migrations/tsconfig.migrations.json node_modules/ts-migrate-mongoose/bin/ts-migrate-mongoose.js migrate
这样迁移文件里的import { UserModel } from 'src/modules/user/repository/user.model';能正确解析,同时UserModel内的绝对路径导入也不会报错。
方案2:执行迁移时强制指定baseUrl
直接在命令行给ts-node加上--baseUrl参数,以项目根目录为基准:
ts-node --baseUrl ./ node_modules/ts-migrate-mongoose/bin/ts-migrate-mongoose.js migrate
也可以把命令写入package.json的scripts里方便复用:
{ "scripts": { "migrate": "ts-node --baseUrl ./ ./node_modules/ts-migrate-mongoose/bin/ts-migrate-mongoose.js migrate" } }
之后直接运行npm run migrate即可。
方案3:用tsconfig-paths解析路径别名
如果项目tsconfig.json已配置baseUrl: './',补充paths配置:
{ "compilerOptions": { "baseUrl": "./", "paths": { "src/*": ["src/*"] } } }
安装tsconfig-paths依赖:
npm install tsconfig-paths --save-dev
修改迁移命令,让ts-node加载路径解析插件:
ts-node -r tsconfig-paths/register node_modules/ts-migrate-mongoose/bin/ts-migrate-mongoose.js migrate
这样所有src/开头的绝对路径都会被正确映射到项目根目录下的src文件夹。
问题根源说明
ts-migrate-mongoose执行迁移文件时,默认会以migrations目录为基准解析路径,而非项目根目录。以上方案都是通过调整ts-node的路径解析规则,强制以项目根目录为基准,从而兼容原有代码中的绝对路径导入。
内容的提问来源于stack exchange,提问作者tahsin zilani
相关产品推荐
相关产品推荐

