问题描述
我一直试图通过创建一个新的制造商来扩展电子锻造,使用 innosetup。
现在关于如何通过扩展 MakerBase 和实现 isSupportedOnCurrentPlatform 和 make 创建新 maker 的文档非常清晰和清晰,但我对如何在我的代码中使用/注册新创建的 maker 感到有些困惑。
maker-inno.js
const path = require("path");
const fs = require("fs");
class MakerInno extends require("@electron-forge/maker-base").default {
isSupportedOnCurrentPlatform() {
return process.platform === "win32";
}
async make(options) {
...
return [pathToOutput];
}
}
module.exports = MakerInno;
forge.config.js
const Innomaker = require("./scripts/maker-inno.js");
const innomakerConfig = {};
module.exports = {
...
makers : [
new Innomaker(innomakerConfig)
]
...
}
现在,我已经将伪造的 make 代码调试到@electron-forge/core/api/make...但是当加载配置并使用制造商时,forgeConfig 被包裹在 Proxy 对象中反过来,制造商也是如此,从那时起它就无法检查我的制造商。
也就是说,这个指针会很受欢迎。
旁注:我真的很讨厌使用 require().default 来扩展类,我的代码必须在打字稿中,但是当涉及到配置文件时,我不知所措,一个关于这样做的更简洁方法的指针会不胜感激:p
解决方法
好吧,我无法仅通过本地类来完成此工作,因此必须在我的项目下创建一个本地包
{
"name": "electron-forge-maker-inno","version": "1.0.0","description": "InnoSetup maker for Electron Forge","main": "dist/index.js","scripts": {
"build": "tsc --project tsconfig.json"
},"engines": {
"node": ">= 10.0.0"
},"dependencies": {
"@electron-forge/maker-base": "6.0.0-beta.54","@electron-forge/shared-types": "6.0.0-beta.54","innosetup-compiler": "^5.6.1"
}
}
并在主项目 package.json 中引用它
"devDependencies": {
...
"electron-forge-maker-inno": "file:scripts/maker-inno",...
}
然后我就可以将制造商添加到我的伪造配置中
module.exports = {
...
makers : [
{ name: "electron-forge-maker-inno",config: innoConfig },]
...
}
这感觉很糟糕,但它再次奏效,理想情况下有人会添加一个 Inno Setup Maker 来锻造。 "innosetup-compiler" 已经完成了必须要做的工作,它只需要一个 Forge Maker 包装器。