在电子构建器中配置 pkg 选项脚本的最佳方法是什么?

Dia*_*rdu 4 macos node.js npm electron-builder

我在电子构建器的 package.json 配置中使用 pkg 选项。我有一些预安装脚本想要在安装时运行。我已按照电子生成器的说明设置脚本的位置,但 npm 似乎无法正确找到文件。

\n\n

我尝试使用 chmod +x file 命令更改文件和文件夹的所有权,但错误仍然存​​在。

\n\n

这是关于 pkg 脚本配置的代码:

\n\n
"build": {\n    "mac": {\n      "target":[\n        "pkg"\n      ]\n    },\n    "pkg":{\n      "scripts":"build/pkg-scripts"\n    }\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到的错误消息是:

\n\n
Error: Exit code: 1. Command failed: pkgbuild --root /Users/user/myApp/myApp-out/electron-builder/mac --component-plist /Users/user/myApp/myApp/electron-builder/com.dessci.myApp.plist --install-location /Applications --scripts /Users/user/myApp/build/build/pkg-scripts /Users/user/mtdesktop/mtdesktop-out/electron-builder/com.dessci.myApp.pkg\npkgbuild: error: Cannot write package to "/Users/user/mtdesktop/mtdesktop-out/electron-builder/com.dessci.myApp.pkg". (The file \xe2\x80\x9cpkg-scripts\xe2\x80\x9d couldn\xe2\x80\x99t be opened.)\n\npkgbuild: Reading components from /Users/user/mtdesktop/mtdesktop-out/electron-builder/com.dessci.myApp.plist\npkgbuild: Adding component at myApp.app\n\npkgbuild: error: Cannot write package to "/Users/user/mtdesktop/mtdesktop-out/electron-builder/com.dessci.myApp.pkg". (The file \xe2\x80\x9cpkg-scripts\xe2\x80\x9d couldn\xe2\x80\x99t be opened.)\n\n    at /Users/user/mtdesktop/node_modules/builder-util/src/util.ts:126:16\n    at ChildProcess.exithandler (child_process.js:306:5)\n    at ChildProcess.emit (events.js:193:13)\n    at maybeClose (internal/child_process.js:999:16)\n    at Process.ChildProcess._handle.onexit (internal/child_process.js:266:5)\nFrom previous event:\n    at /Users/user/mtdesktop/node_modules/graceful-fs/graceful-fs.js:111:16\n    at /Users/user/mtdesktop/node_modules/graceful-fs/graceful-fs.js:45:10\n    at FSReqCallback.args [as oncomplete] (fs.js:145:20)\nFrom previous event:\n    at PkgTarget.buildComponentPackage (/Users/user/mtdesktop/node_modules/app-builder-lib/src/targets/pkg.ts:115:113)\n    at /Users/user/mtdesktop/node_modules/app-builder-lib/src/targets/pkg.ts:57:12\n    at Generator.next (<anonymous>)\nFrom previous event:\n    at PkgTarget.build (/Users/user/mtdesktop/node_modules/app-builder-lib/src/targets/pkg.ts:31:42)\n    at Function.buildAsyncTargets (/Users/user/mtdesktop/node_modules/app-builder-lib/src/platformPackager.ts:140:36)\n    at MacPackager.packageInDistributableFormat (/Users/user/mtdesktop/node_modules/app-builder-lib/src/platformPackager.ts:119:24)\n    at nonMasPromise.then.then (/Users/user/mtdesktop/node_modules/app-builder-lib/src/macPackager.ts:90:26)\n    at processImmediate (internal/timers.js:443:21)\nFrom previous event:\n    at /Users/user/mtdesktop/node_modules/app-builder-lib/src/macPackager.ts:90:10\n    at Generator.next (<anonymous>)\nFrom previous event:\n    at MacPackager.pack (/Users/user/mtdesktop/node_modules/app-builder-lib/src/macPackager.ts:80:95)\n    at /Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:430:24\n    at Generator.next (<anonymous>)\n    at xfs.stat (/Users/user/mtdesktop/node_modules/fs-extra-p/node_modules/fs-extra/lib/mkdirs/mkdirs.js:56:16)\n    at /Users/user/mtdesktop/node_modules/graceful-fs/polyfills.js:285:20\n    at FSReqCallback.oncomplete (fs.js:159:5)\nFrom previous event:\n    at Packager.doBuild (/Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:396:24)\n    at /Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:366:57\n    at Generator.next (<anonymous>)\n    at /Users/user/mtdesktop/node_modules/graceful-fs/graceful-fs.js:111:16\n    at /Users/user/mtdesktop/node_modules/graceful-fs/graceful-fs.js:45:10\n    at FSReqCallback.args [as oncomplete] (fs.js:145:20)\nFrom previous event:\n    at Packager._build (/Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:335:133)\n    at /Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:331:23\n    at Generator.next (<anonymous>)\n    at processImmediate (internal/timers.js:443:21)\nFrom previous event:\n    at Packager.build (/Users/user/mtdesktop/node_modules/app-builder-lib/src/packager.ts:288:14)\n    at build (/Users/user/mtdesktop/node_modules/app-builder-lib/src/index.ts:59:28)\n    at build (/Users/user/mtdesktop/node_modules/electron-builder/src/builder.ts:227:10)\n    at then (/Users/user/mtdesktop/node_modules/electron-builder/src/cli/cli.ts:46:19)\n
Run Code Online (Sandbox Code Playgroud)\n

Sab*_*esh 5

您需要为脚本值提供pkg-scripts 的相对路径。

\n\n

包.json

\n\n
"build": {\n"appId": "com.audio.application",\n"productName": "Audio-App",\n"artifactName": "${productName}-Setup-${version}.${ext}",\n"copyright": "Copyright \xc2\xa9 2020 Audio Corp",\n"mac": {\n  "category": "com.audio.application",\n  "target": [\n    "pkg"\n  ],\n  "icon": "dist",\n  "identity": "identity",\n  "darkModeSupport": true,\n  "hardenedRuntime": true,\n  "gatekeeperAssess": false,\n  "artifactName": "${productName}.${ext}"\n},\n"pkg": {\n  "scripts": "../build/pkg-scripts",\n  "installLocation": "/Applications",\n  "background": {\n    "file": "build/icon/sound.png",\n    "alignment": "bottomleft"\n  },\n  "allowAnywhere": true,\n  "allowCurrentUserHome": true,\n  "allowRootDirectory": true,\n  "license": "build/license.html",\n  "welcome": "build/resources/welcome.txt",\n  "conclusion": "build/resources/conclusion.txt",\n  "isVersionChecked": true,\n  "isRelocatable": false,\n  "overwriteAction": "upgrade"\n},\n"directories": {\n  "buildResources": "release",\n  "output": "release"\n}\n},\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

构建目录的文件夹结构-\n
\n(位于项目的根级别)

\n\n

在此输入图像描述

\n\n
\n\n

preinstall.sh -\n
\n(确保您已对此文件运行 chmod +x 以使其可执行

\n\n
#!/bin/sh\necho "Executing preinstaller script for custom installer"\n\n# Deleting App components from Application folder.\necho "Deleting Audio-Configration Logs"\nlogsPath=~/Library/Logs/Audio-Configration\nif [ -d "$logsPath" ]\nthen\nrm -rf ~/Library/Logs/Audio-Configration\necho "***Deleted Audio-Configration Logs Successfully***"\nfi\n\necho "Deleting Audio-Configration Application Support"\napplicationSupportPath=~/Library/Application\\ Support/Audio-Configration\nif [ -d "$applicationSupportPath" ]\nthen\nrm -rf ~/Library/Application\\ Support/Audio-Configration\necho "***Deleted Audio-Configration Application Support Successfully***"\nfi\n\necho "Finished:preflight"\nexit 0\n
Run Code Online (Sandbox Code Playgroud)\n\n

上面的预安装脚本是为了确保当用户重新安装应用程序时,需要删除Application Support目录中以前的Logs和应用程序相关内容

\n