Skip to content

使用typeorm-cli执行迁移时,无法识别ts的路径里的@别名

问题描述

在nestjs项目里,使用typeorm-ts-node-commonjs migration:run -d ./scripts/data-source.ts执行迁移时,由于*.entity.ts文件都是用@/**绝对路径的方式导入,导致命令运行后报错Error: Cannot find module '@/modules/roles/entities/role.entity'

也就是说typeorm-ts-node-commonjs这个命令,在执行时没有调用项目里tsconfig.json里配置好的路径别名。

解决方案

通过NODE_OPTIONS=' -r tsconfig-paths/register'把配好的别名传递给typeorm-ts-node-commonjs使用。

关于NODE_OPTIONS=' -r tsconfig-paths/register'命令作用,ChatGPT给出的解释如下:

  • NODE_OPTIONS: 是一个环境变量,用于为 Node.js 进程设置全局选项。
  • -r tsconfig-paths/register: 这个选项用于在 Node.js 启动时预先注册 tsconfig-paths 模块。这样可以确保在运行任何 Node.js 应用程序时,TypeScript 的路径别名(如 @ 符号)能够被正确解析。

修改后命令如下:

bash
NODE_OPTIONS=' -r tsconfig-paths/register' typeorm-ts-node-commonjs migration:run -d ./scripts/data-source.ts

命令如果觉得太长,可以优化下:

json
{
  "scripts": {
        "typeorm": "NODE_OPTIONS=' -r tsconfig-paths/register' typeorm-ts-node-commonjs",
        "migration:run": "pnpm typeorm migration:run -d ./scripts/data-source.ts",
}

苏ICP备20040768号