电子伪造:如何指定挂钩?

问题描述

目标

我想在电子伪造的包装步骤之前删除一些文件夹,因为ignore.roge.config中的选项package.json并没有摆脱我为某些软件包指定忽略的所有中间文件夹。这些中间文件夹通常是在打包过程中的本机构建过程中生成的。

问题

但是添加hooks字段with the documented events似乎无效,例如,

具有这样的package.json字段似乎对方程式没有任何作用,即,我没有看到预期的控制台日志。

  "config": {
    "forge": {
      "packagerConfig": {
        "icon": "src/images/myapp","ignore": [
          "/.gitignore","/.vscode","/yarn.lock","/node_modules/mydep/build/","/node_modules/mydep/prebuilds/linux*"
        ]
      },"hooks": {
          "prePackage": "async () => {\"console.log("this is prepackage step.");\"} "
      },"makers": [
        {
          "name": "@electron-forge/maker-zip","platforms": [
            "darwin","win32"
          ]
        }
      ]
    }
  },

参考a related elctron-forge github issue,我还尝试将JS源文件提供给钩子


"hooks": "require:./hooks.js",

钩子脚本的外观

{
    prePackage: async () => {
        console.log('this is prepackage step.');
    }
}

这也不起作用。

更糟糕的是,我什至无法通过这种方式指定多个钩子:

{
    generateAssets: async () => {
        console.log('We should generate some assets here');
    },prePackage: async (forgeConfig,options) => {
        console.error('lbn: prePackage');
    }
}

上面的代码在运行yarn make时给我以下错误

An unhandled error has occurred inside Forge:
Unexpected token ':'
/path/to/myapp/hooks.js:5
    prePackage: async (forgeConfig,options) => {
              ^

SyntaxError: Unexpected token ':'
    at wrapSafe (internal/modules/cjs/loader.js:1116:16)
    at Module._compile (internal/modules/cjs/loader.js:1164:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1220:10)
    at Module.load (internal/modules/cjs/loader.js:1049:32)
    at Function.Module._load (internal/modules/cjs/loader.js:937:14)
    at Module.require (internal/modules/cjs/loader.js:1089:19)
    at require (internal/modules/cjs/helpers.js:73:18)
    at renderConfigTemplate (/path/to/myapp/node_modules/@electron-forge/core/src/util/forge-config.ts:100:20)
    at _default (/path/to/myapp/node_modules/@electron-forge/core/src/util/forge-config.ts:145:3)
    at /path/to/myapp/node_modules/@electron-forge/core/src/api/make.ts:96:19
error Command Failed with exit code 1.

问题

指定钩子的正确方法是什么?

解决方法

我自己解决了。

我们应该将挂钩作为普通的全局模块放置


// ./hooks.js

const fs = require('fs');
const path = require('path');

module.exports = {

postPackage: async (forgeConfig,options) => {
    console.warn('\n\npostPackage: exclude files ...\n\n');
}

}; // module.exports = {


然后在package.json

中引用它
"hooks": "require:./hooks.js",