关于migration:generate时会出现cannot find module及migration指令相关的问题

来源:12-12 创建菜单及数据对接:数据库migrations相关(非常重要)

幕布斯2449755

2023-12-19

关于migration:generate时会出现cannot find module相关的问题

在执行npm run migration:generate时会出现部分entity cannot find module问题,如下图
图片描述

经确认可能是因为必须要使用相对路径?
但因为vscode 结合 auto import插件在coding时会做自动引入,并且项目中tsconfig配置了baseurl:‘./’,所以自动引入都是绝对路径。

问题一
请问如果希望使用绝对路径的话,有解决方案吗?
使用绝对路径个人感觉有两个优点:

  • 代码优雅
  • 可读性更清晰

问题二
关于migration的在实际业务中使用的逻辑
疑问:

  1. 在实际项目中,migration:generate、migration:run等操作,是否应该只在生产服务器上操作执行?
  2. 因为在开发环境下,包括数据库也是开发环境,假设typeorm配置synchronize始终为true,那么数据库架构始终应该与本地entities自动同步,测试环境同理。也就是说,在部署到生产环境前,应该运行migration相关指令,并加载***生产环境下***的数据库连接信息,再去做相关操作?
  3. 因为根据所学知识,在运行migration相关指令时,无法区分node_env为“dev”还是“prod”,所以是否可以通过命令行传参(比较复杂的方式)或 通过在ormconfig配置文件内默认读取生产环境数据库信息方式来给migration提供连接数据库信息?

感谢老师赐教!

写回答

1回答

Brian

2023-12-19

我看了你的代码,有循环依赖:

AuditTrail -> User -> Role -> Menu -> AuditTrail


问题一:

请问如果希望使用绝对路径的话,有解决方案吗?——可以用啊,你有没有试过?


问题二
关于migration的在实际业务中使用的逻辑

疑问:

  1. 在实际项目中,migration:generate、migration:run等操作,是否应该只在生产服务器上操作执行?

——这些是方便开发的哦,一般我们在开发之前会做synchronize: true,开发完成之后,会关闭成false,后面如果要更新线上的数据库,也不是直接更新,除非是扩表,可能直接更新,如果是要修改一些字段,是需要有一个测试环境来进行测试之后,再进行线上的更新。更新一般会考虑用一个sql文件或者使用js的脚本来更新测试数据库,然后把测试数据库迁移过去。


2. 因为在开发环境下,包括数据库也是开发环境,假设typeorm配置synchronize始终为true

——错,一般要在线上把同步刚回去成false


3. 因为根据所学知识,在运行migration相关指令时,无法区分node_env为“dev”还是“prod”

——小伙伴,可以设置NODE_ENV来传参。


是否可以通过命令行传参(比较复杂的方式)或 通过在ormconfig配置文件内默认读取生产环境数据库信息方式来给migration提供连接数据库信息?

——可以,但是不觉得麻烦吗?node运行ormconfig配置的时候,是可以拿到env环境变量的啊。

0
6
Brian
建议使用单向关系,如果你频繁的有循环引用的问题,就要看看是否是自己的表设计的有问题
2023-12-23
共6条回复

NestJS 入门到实战 前端必学服务端新趋势

近几年快速发展的Node.js框架,掌握未来前端工程师后端开发能力

569 学习 · 238 问题

查看课程