启用asar的@mikro orm迁移脚本的Electron



我在我的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开发人员的。

  1. 有没有一种方法可以从外部JS文件以编程方式加载asar包中的节点模块?

  2. 是否可以将迁移脚本捆绑到asar中,同时让MikroORM在asar包中搜索它们?

我们可以修补require路径,使其在开发和生产模式下都能工作。

require(
(
__dirname.includes('asar.unpacked') 
? '../../../../app.asar/node_modules/' 
: ''
) + '@mikro-orm/migrations'
);

最新更新