【问题标题】:Error: Electron packaging with electron-packager错误:使用电子包装器进行电子包装
【发布时间】:2019-12-03 04:53:35
【问题描述】:

我正在尝试使用 electron-packager 打包我的 ember-electron 应用程序。

这适用于运行 Ember-electron、ember-cli: 3.11.0、node: 10.16.0 的 windows 电子应用程序。过去运行良好,但删除“electron-out”、“dist”和“release-builds”文件夹后出现错误。

{
    "name": "messenger",
    "productName": "Messenger",
    "version": "0.0.77",
    "main": "./ember-electron/main.js",
    "private": true,
    "scripts": {
        "build": "ember build",
        "package-win": "electron-packager . --project-path=electron-out/project --overwrite --platform=win32 --arch=x64 --icon=assets/messenger.ico --no-prune ---app-version=\"1.0.0.77\" --executable-name=\"Messenger\" --out=release-builds",

        "lint:hbs": "ember-template-lint .",
        "lint:js": "eslint .",
        "start": "ember serve",
        "test": "ember test"
    },
    "devDependencies": {
    "electron": "^5.0.8",
    "electron-builder": "^20.40.2",
    "electron-forge": "^5.2.4",
    "electron-packager": "^14.0.2",
    "electron-prebuilt-compile": "3.0.2",
    "electron-winstaller": "^2.7.0",
    ....
}

这是我得到的错误日志:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'C:\\Users\\userName\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli   'run',
1 verbose cli   'package-win' ]
2 info using npm@6.10.1
3 info using node@v10.16.0
4 verbose run-script [ 'prepackage-win', 'package-win', 'postpackage-win']
5 info lifecycle messenger@0.0.77~prepackage-win: messenger@0.0.77
6 info lifecycle messenger@0.0.77~package-win: messenger@0.0.77
7 verbose lifecycle messenger@0.0.77~package-win: unsafe-perm in lifecycle true
8 verbose lifecycle messenger@0.0.77~package-win: PATH:C:\Users\userName\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin;C:\messenger\New\client\node_modules\.bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\dotnet\;C:\Program Files (x86)\Microsoft Emulator Manager\1.0\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Python27;C:\Python27\Scripts;C:\Program Files (x86)\Yarn\bin\;C:\Program Files\OpenSSL-Win64\bin;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\PHP\;C:\Apache24\bin;C:\Program Files\PuTTY\;C:\Program Files\Microsoft VS Code\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\cygwin64\bin;C:\Python27\Scripts\;C:\Python27\;C:\Users\userName\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Bandizip\;C:\Program Files\Sublime Text 3;C:\Users\userName\AppData\Local\Yarn\bin;C:\Program Files (x86)\Yarn;C:\Program Files\OpenSSL-Win64\bin;C:\PHP\;C:\Apache24\bin;C:\Users\userName\AppData\Roaming\npm;C:\cygwin64\bin;
9 verbose lifecycle messenger@0.0.77~package-win: CWD: C:\messenger\New\client
10 silly lifecycle messenger@0.0.77~package-win: Args: [ '/d /s /c', 'electron-packager . ' ]
11 silly lifecycle messenger@0.0.77~package-win: Returned: code: 1  signal: null
12 info lifecycle messenger@0.0.77~package-win: Failed to exec package-win script
13 verbose stack Error: messenger@0.0.77 package-win: `electron-packager . --project-path=electron-out/project --overwrite --platform=win32 --arch=x64 --icon=assets/messenger.ico --no-prune ---app-version=\"1.0.0.77\" --executable-name=\"Messenger\" --out=release-builds",`
13 verbose stack Exit status 1
13 verbose stack     at EventEmitter.<anonymous (C:\Users\userName\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\index.js:301:16)
13 verbose stack     at EventEmitter.emit (events.js:198:13)
13 verbose stack     at ChildProcess.<anonymous> (C:\Users\userName\AppData\Roaming\npm\node_modules\npm\node_modules\npm-lifecycle\lib\spawn.js:55:14)
13 verbose stack     at ChildProcess.emit (events.js:198:13)
13 verbose stack     at maybeClose (internal/child_process.js:982:16)
13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
14 verbose pkgid messenger@0.0.77
15 verbose cwd C:\messenger\New\client
16 verbose Windows_NT 10.0.17763
17 verbose argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Users\\userName\\AppData\\Roaming\\npm\\node_modules\\npm\\bin\\npm-cli.js" "run" "package-win"
18 verbose node v10.16.0
19 verbose npm  v6.10.1
20 error code ELIFECYCLE
21 error errno 1
22 error messenger@0.0.77 package-win: `electron-packager . --project-path=electron-out/project --overwrite --platform=win32 --arch=x64 --icon=assets/messenger.ico --no-prune ---app-version=\"1.0.0.77\" --executable-name=\"Messenger\" --out=release-builds",`
22 error Exit status 1
23 error Failed at the messenger@0.0.77 package-win script.
23 error This is probably not a problem with npm. There is likely additional logging output above.
24 verbose exit [ 1, true ]

【问题讨论】:

  • 确保通过将代码放入代码块中来使代码更具可读性 - 它会阻止文本换行,同时为更长的示例提供更多滚动区域。您可以通过在每行代码前面放置四个空格字符来做到这一点。
  • @Joseph 谢谢!这是我在堆栈溢出中的第一篇文章 :) 我会记住的
  • 也许可以试试 electron-builder?
  • @MikeM 你能告诉我怎么做吗?是通过在电子锻造配置中进行定制吗?我想更改我的程序的Properties->Detailed information,但我不知道如何
  • 我会写这个来回答你的问题。

标签: node.js npm electron electron-packager


【解决方案1】:

我建议您改用 electron-builder。我已经写了一个 Medium article 详细记录了这一点,你可以在 GitHub 上找到我的 complete project。

但除此之外,这里有一个快速概述。先加electron-builder:

npm install electron-builder --save-dev

要使electron-builder 工作,您需要指明哪些文件必须包含在构建中。您可以通过 package.json 中的构建密钥来完成此操作。假设您在名为app/ 的文件夹中编译文件。然后你只需要添加它们在 node_modules 文件夹中的依赖项(记住,一个独立的应用程序必须包含 everything)。因此,在您的 package.json 中添加一个“构建”键:

"build": {
  "appId": "com.electron.build.example",
  "files": [
    "app/**/*",
    "node_modules/**/*",
    "package.json"
  ],
  "publish": null
}

添加调用(发布)构建的脚本:

"scripts": {
  "postinstall": "install-app-deps",
  "start": "gulp start",
  "release": "gulp release"
},

我使用了gulp,但你可以使用任何你想要的东西(或者甚至直接从 npm 调用 electron-builder)。由你决定。就我而言,我只需要将任务包含在我的 gulp 文件中。请注意,我使用了exec 而不是spawn,以便在 Windows 机器上进行交叉编译。

const exec = require('child_process').exec;
gulp.task('release', ['build'], () => {
    return exec(        
        __dirname+'/node_modules/.bin/electron-builder .'
    ).on('close', () => process.exit());
});

【讨论】:

  • electron-builder 比electron-packager 更令人困惑,而且你关于媒体的文章根本没有帮助:/
  • 终于让它工作了。该死的教程有错误的 JSON 属性值。有什么方法可以让用户选择安装/解压可执行文件的文件夹?
  • 拜托,你能告诉我上面的代码(我刚刚更新的)是否适合你吗?
  • 我没有使用 gulp。没用过所以不知道怎么用
  • 好吧,我只是好奇你说“该死的教程的 JSON 属性值错误”是什么意思
猜你喜欢
  • 2019-03-10
  • 2019-10-31
  • 2016-08-03
  • 2016-12-28
  • 2017-12-22
  • 2017-06-11
  • 2017-12-27
  • 1970-01-01
  • 2018-04-26
相关资源
最近更新 更多