electron-forge:如何指定挂钩?
electron-forge: how to specify hooks?
目标
我想在 electron-forge 的打包步骤之前去掉一些文件夹,因为 package.json
中的选项 ignore.roge.config
并没有去掉我指定忽略的所有中间文件夹一些包裹。这些中间文件夹通常是在打包期间的本机构建过程中生成的。
问题
但是添加 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,我也试过给hooks提供一个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",
目标
我想在 electron-forge 的打包步骤之前去掉一些文件夹,因为 package.json
中的选项 ignore.roge.config
并没有去掉我指定忽略的所有中间文件夹一些包裹。这些中间文件夹通常是在打包期间的本机构建过程中生成的。
问题
但是添加 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,我也试过给hooks提供一个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",