我在我的Electron应用程序中使用@mikro orm/migrations,我创建了迁移文件,并希望在生产模式下运行数据库迁移,同时,我还希望在Electron中启用asar打包,以提高应用程序的启动速度。
如果我不启用asar打包,文件夹结构如下,一切正常:
app/node_modules/@mikro-orm
app/node_modules/...
app/migrations/Migration20220224172334.js
当启用asar打包时,文件夹结构变为:
app.asar // this is a package with all node modules
app.asar.unpacked/migrations/Migration20220224172334.js
因此,我在加载Migration20220224172334.js
时遇到了类似Cannot find module '@mikro-orm/migrations'
的错误,以下是迁移脚本的内容:
const { Migration } = require('@mikro-orm/migrations');
class Migration20220224172334 extends Migration {
...
我认为这个问题是针对Electron开发人员或Mikro ORM开发人员的。
有没有一种方法可以从外部JS文件以编程方式加载asar包中的节点模块?
是否可以将迁移脚本捆绑到asar中,同时让MikroORM在asar包中搜索它们?
我们可以修补require
路径,使其在开发和生产模式下都能工作。
require(
(
__dirname.includes('asar.unpacked')
? '../../../../app.asar/node_modules/'
: ''
) + '@mikro-orm/migrations'
);