关于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的在实际业务中使用的逻辑
疑问:
- 在实际项目中,migration:generate、migration:run等操作,是否应该只在生产服务器上操作执行?
- 因为在开发环境下,包括数据库也是开发环境,假设typeorm配置synchronize始终为true,那么数据库架构始终应该与本地entities自动同步,测试环境同理。也就是说,在部署到生产环境前,应该运行migration相关指令,并加载***生产环境下***的数据库连接信息,再去做相关操作?
- 因为根据所学知识,在运行migration相关指令时,无法区分node_env为“dev”还是“prod”,所以是否可以通过命令行传参(比较复杂的方式)或 通过在ormconfig配置文件内默认读取生产环境数据库信息方式来给migration提供连接数据库信息?
感谢老师赐教!
1回答
-
Brian
2023-12-19
我看了你的代码,有循环依赖:
AuditTrail -> User -> Role -> Menu -> AuditTrail
问题一:
请问如果希望使用绝对路径的话,有解决方案吗?——可以用啊,你有没有试过?
问题二
关于migration的在实际业务中使用的逻辑疑问:
在实际项目中,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环境变量的啊。
062023-12-23
相似问题