如何将 Electron 应用程序打包成单个可执行文件?
How to package an Electron app into a single executable?
使用 electron-packager,我可以为各种架构和平台创建 'packaged' 版本的 JavaScript 应用程序。但是,它不会将每个构建打包为我可以分发的单个二进制文件。
在寻找替代方案时,我发现了 EncloseJs,但它不是免费的(我更喜欢免费的解决方案)。
我发现的另一个是 electron-boilerplate,它只创建一个 *.deb、*.app 或一个 Windows 安装程序,而不是一个 运行 程序的可执行文件.
是否可以使用 Electron 创建单个可执行文件?
不是真的,但没关系。
我怀疑是否有许多桌面应用程序仅由可执行文件组成。通常你会有很多资源文件。 Electron 也一样:它带有一个启动 Electron 的 'single executable' 文件和许多其他文件。当你使用 electron-packager 时,你会得到一个启动你的应用程序的可执行文件,但它与许多资源文件(比如你的 Javascript 代码)捆绑在一起。我想您可以尝试使用某种 bin 打包器将所有内容打包到一个二进制文件中,但您为什么要这样做呢?大多数应用程序都包含许多文件和文件夹,并且没有问题。
是的,(现在)有可能。选择任何模块生成单个 exe 文件:
electron-builder, electron-forge or windows-installer.
我不确定是否有更新的解决方案但是
你可以使用 BoxedApp,虽然你必须购买它,但你可以搜索免费版本。
您也可以使用WinRAR, your project will pack into single exe by creating SFX archive. Here is a video on How To Make Portable Application using WinRAR。
缺点: 启动应用程序需要更长的时间。
注意: 在使用上述任何方法之前,您必须先打包您的项目。
PS: 仅在 Windows 上测试。
希望对您有所帮助。
尝试使用 electron-builder -p --win
。它将建立生产就绪 .exe
。我是用 electron-builder@21.2.0
做的
对于可发布的版本,您需要 package.json
文件中的发布提供商,请考虑给定的示例。
"build": {
"appId": "com.trinityinfosystem.electron.exchange.stream",
"productName": "Accurate",
"copyright": "Copyright © 2018 Trinity InfoSystem",
"mac": {
"category": "public.app-category.utilities",
"icon": "assets/icon.icns",
"target": [
"zip",
"dmg"
],
"publish": [
"github"
]
},
"win": {
"publisherName": "Trinity InfoSystem",
"publish": [
"github"
],
"target": [
"nsis"
]
},
"linux": {
"target": [
"AppImage",
"tar.gz"
]
},
"dmg": {
"background": "assets/background.png",
"icon": "assets/icon.icns",
"title": "Accurate Installer"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"installerIcon": "assets/icon.ico",
"installerSidebar": "assets/sidebar.bmp",
"uninstallerSidebar": "assets/sidebar.bmp",
"license": "assets/agreement.html",
"createDesktopShortcut": true,
"createStartMenuShortcut": true
},
"publish": [
{
"provider": "github",
"owner": "vkiranmaniya",
"repo": "accurate",
"vPrefixedTagName": true,
"private": true,
"releaseType": "draft"
}
]
},
将给定的发布配置作为根属性添加到您的 package.json。在构建 运行 时,您需要 Github 个人访问令牌(这里是 Doc)。
您可以将令牌作为 env
变量从 main.js
导出,
process.env.GH_TOKEN = 'YOUR_PERSONAL_ACCESS_TOKEN_HERE';
如果您想使用 GitHub 设置自动更新,您可以使用给定的模块并调用 checkForUpdates()
方法 from main.js
const electron = require("electron");
const updater = require("electron-updater");
const autoUpdater = updater.autoUpdater;
autoUpdater.on('checking-for-update', function () {
sendStatusToWindow('Checking for update...');
});
autoUpdater.on('update-available', function (info) {
sendStatusToWindow('Update available.');
});
autoUpdater.on('update-not-available', function (info) {
sendStatusToWindow('Update not available.');
});
autoUpdater.on('error', function (err) {
sendStatusToWindow('Error in auto-updater.');
});
autoUpdater.on('download-progress', function (progressObj) {
let log_message = "Download speed: " + progressObj.bytesPerSecond;
log_message = log_message + ' - Downloaded ' + parseInt(progressObj.percent) + '%';
log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')';
sendStatusToWindow(log_message);
});
autoUpdater.on('update-downloaded', function (info) {
sendStatusToWindow('Update downloaded; will install in 1 seconds');
});
autoUpdater.on('update-downloaded', function (info) {
setTimeout(function () {
autoUpdater.quitAndInstall();
}, 1000);
});
function checkForUpdates(){
const data = {
'provider': 'github',
'owner': 'vkiranmaniya',
'repo': 'exchange',
'token': 'YOUR_PERSONAL_TOKEN_HERE'
};
autoUpdater.setFeedURL(data);
autoUpdater.checkForUpdates();
}
function sendStatusToWindow(message) {
console.log(message);
}
module.exports = {
checkForUpdates,
}
现在您可以运行 命令electron-build -p --win
构建可自动更新的独立 .exe 文件。使用 --mac
或 --linux
来针对构建的特定平台。
电子单.exe:
electron-builder --win portable
它生成一个 .exe !!!
而且你不需要触摸 package.json
。
更多info doc
如果electron-builder
显示一些错误:
Cannot find module 'fs/promises' Electron JS
使用以下方法降级 Electron Builder:"electron-builder": "22.10.5"
或将 NodeJS 升级到 14+
.
使用 electron-packager,我可以为各种架构和平台创建 'packaged' 版本的 JavaScript 应用程序。但是,它不会将每个构建打包为我可以分发的单个二进制文件。
在寻找替代方案时,我发现了 EncloseJs,但它不是免费的(我更喜欢免费的解决方案)。
我发现的另一个是 electron-boilerplate,它只创建一个 *.deb、*.app 或一个 Windows 安装程序,而不是一个 运行 程序的可执行文件.
是否可以使用 Electron 创建单个可执行文件?
不是真的,但没关系。
我怀疑是否有许多桌面应用程序仅由可执行文件组成。通常你会有很多资源文件。 Electron 也一样:它带有一个启动 Electron 的 'single executable' 文件和许多其他文件。当你使用 electron-packager 时,你会得到一个启动你的应用程序的可执行文件,但它与许多资源文件(比如你的 Javascript 代码)捆绑在一起。我想您可以尝试使用某种 bin 打包器将所有内容打包到一个二进制文件中,但您为什么要这样做呢?大多数应用程序都包含许多文件和文件夹,并且没有问题。
是的,(现在)有可能。选择任何模块生成单个 exe 文件: electron-builder, electron-forge or windows-installer.
我不确定是否有更新的解决方案但是 你可以使用 BoxedApp,虽然你必须购买它,但你可以搜索免费版本。
您也可以使用WinRAR, your project will pack into single exe by creating SFX archive. Here is a video on How To Make Portable Application using WinRAR。
缺点: 启动应用程序需要更长的时间。
注意: 在使用上述任何方法之前,您必须先打包您的项目。
PS: 仅在 Windows 上测试。
希望对您有所帮助。
尝试使用 electron-builder -p --win
。它将建立生产就绪 .exe
。我是用 electron-builder@21.2.0
对于可发布的版本,您需要 package.json
文件中的发布提供商,请考虑给定的示例。
"build": {
"appId": "com.trinityinfosystem.electron.exchange.stream",
"productName": "Accurate",
"copyright": "Copyright © 2018 Trinity InfoSystem",
"mac": {
"category": "public.app-category.utilities",
"icon": "assets/icon.icns",
"target": [
"zip",
"dmg"
],
"publish": [
"github"
]
},
"win": {
"publisherName": "Trinity InfoSystem",
"publish": [
"github"
],
"target": [
"nsis"
]
},
"linux": {
"target": [
"AppImage",
"tar.gz"
]
},
"dmg": {
"background": "assets/background.png",
"icon": "assets/icon.icns",
"title": "Accurate Installer"
},
"nsis": {
"oneClick": false,
"perMachine": false,
"allowToChangeInstallationDirectory": true,
"installerIcon": "assets/icon.ico",
"installerSidebar": "assets/sidebar.bmp",
"uninstallerSidebar": "assets/sidebar.bmp",
"license": "assets/agreement.html",
"createDesktopShortcut": true,
"createStartMenuShortcut": true
},
"publish": [
{
"provider": "github",
"owner": "vkiranmaniya",
"repo": "accurate",
"vPrefixedTagName": true,
"private": true,
"releaseType": "draft"
}
]
},
将给定的发布配置作为根属性添加到您的 package.json。在构建 运行 时,您需要 Github 个人访问令牌(这里是 Doc)。
您可以将令牌作为 env
变量从 main.js
导出,
process.env.GH_TOKEN = 'YOUR_PERSONAL_ACCESS_TOKEN_HERE';
如果您想使用 GitHub 设置自动更新,您可以使用给定的模块并调用 checkForUpdates()
方法 from main.js
const electron = require("electron");
const updater = require("electron-updater");
const autoUpdater = updater.autoUpdater;
autoUpdater.on('checking-for-update', function () {
sendStatusToWindow('Checking for update...');
});
autoUpdater.on('update-available', function (info) {
sendStatusToWindow('Update available.');
});
autoUpdater.on('update-not-available', function (info) {
sendStatusToWindow('Update not available.');
});
autoUpdater.on('error', function (err) {
sendStatusToWindow('Error in auto-updater.');
});
autoUpdater.on('download-progress', function (progressObj) {
let log_message = "Download speed: " + progressObj.bytesPerSecond;
log_message = log_message + ' - Downloaded ' + parseInt(progressObj.percent) + '%';
log_message = log_message + ' (' + progressObj.transferred + "/" + progressObj.total + ')';
sendStatusToWindow(log_message);
});
autoUpdater.on('update-downloaded', function (info) {
sendStatusToWindow('Update downloaded; will install in 1 seconds');
});
autoUpdater.on('update-downloaded', function (info) {
setTimeout(function () {
autoUpdater.quitAndInstall();
}, 1000);
});
function checkForUpdates(){
const data = {
'provider': 'github',
'owner': 'vkiranmaniya',
'repo': 'exchange',
'token': 'YOUR_PERSONAL_TOKEN_HERE'
};
autoUpdater.setFeedURL(data);
autoUpdater.checkForUpdates();
}
function sendStatusToWindow(message) {
console.log(message);
}
module.exports = {
checkForUpdates,
}
现在您可以运行 命令electron-build -p --win
构建可自动更新的独立 .exe 文件。使用 --mac
或 --linux
来针对构建的特定平台。
电子单.exe:
electron-builder --win portable
它生成一个 .exe !!!
而且你不需要触摸 package.json
。
更多info doc
如果electron-builder
显示一些错误:
Cannot find module 'fs/promises' Electron JS
使用以下方法降级 Electron Builder:"electron-builder": "22.10.5"
或将 NodeJS 升级到 14+