我做了一个简单的电子应用程序:
main.js
const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
let win
function createWindow () {
win = new BrowserWindow({
width: 800,
height: 600,
icon: path.join(__dirname, 'icon.ico')
})
win.maximize();
win.loadURL('https://stackoverflow.com/', {"extraHeaders" : "pragma: no-cache\n"});
win.on('closed', () => {
win = null
})
}
app.on('ready', createWindow)
app.on('browser-window-created',function(e,window) {
window.setMenu(null);
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
if (win === null) {
createWindow()
}
}) …
Run Code Online (Sandbox Code Playgroud) 我正在用Electron构建一个应用程序并使用Electron Builder进行打包.运行电子时,我想传递这个命令行参数: - enable-mixed-sandbox.
可能吗?怎么样?
这个:
app.commandLine.appendSwitch('enable-mixed-sandbox')
Run Code Online (Sandbox Code Playgroud)
由于以下原因不起作用:
请注意,调用app.commandLine.appendSwitch(' - enable-sandbox')是不够的,因为电子/节点启动代码在可以更改铬沙箱设置后运行.必须在命令行上将开关传递给电子:
Run Code Online (Sandbox Code Playgroud)electron --enable-sandbox app.js
只有某些渲染器才能激活操作系统沙箱,如果启用了--enable-sandbox,则无法创建普通的电子窗口.
我无法Electron App
使用以下命令构建 a 的可执行文件:
electron-packager . electron-tutorial-app --overwrite --asar=true --platform=linux --arch=x64 --prune=true --out=release-builds
Run Code Online (Sandbox Code Playgroud)
构建文件是一个共享库文件 (application/x-sharedlib),不在Ubuntu 18
. 相反,我在 Nautilus 中打开文件时收到以下错误消息:
无法显示“电子教程应用程序”
没有为“共享库”文件安装应用程序。您要搜索打开此文件的应用程序吗?
[否] [是]
有什么办法可以做到这一点吗?
我最近开始使用电子.我通过创建一个hello world app(包含文件index.html,main.js,package.json)成功完成了第一阶段.现在我正在尝试使用电子打包器打包应用程序,但收到此错误
我遵循的步骤:
npm init
命令初始化项目目录.npm install electron --save-dev
.npm start
执行应用程序.npm install electron-packager
.electron-packager .
我用电子创建了新的角度项目。我确实需要设置电子。
我有以下错误。
./node_modules/electron/index.js 中的错误
找不到模块:错误:无法解析“D:\PATH\desktop\node_modules\electron”中的“fs”
我的 package.json 文件
{
"name": "desktop",
"version": "0.0.0",
"main": "main.js",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"electron": "ng build && electron .",
"electron-aot": "ng build --prod && electron ."
},
"private": true,
"dependencies": {
"@angular/animations": "~7.1.0",
"@angular/common": "~7.1.0",
"@angular/compiler": "~7.1.0",
"@angular/core": "~7.1.0",
"@angular/forms": "~7.1.0",
"@angular/platform-browser": "~7.1.0",
"@angular/platform-browser-dynamic": "~7.1.0",
"@angular/router": "~7.1.0",
"core-js": "^2.5.4",
"rxjs": "~6.3.3",
"tslib": "^1.9.0",
"zone.js": "~0.8.26"
},
"devDependencies": {
"@angular-devkit/build-angular": …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为电子应用程序创建 Windows 安装程序。
首先,应用程序使用电子打包器进行打包。
exec(`npx electron-packager ./ "My App Name" --platform=win32 --out=${packagedLocation}`);
Run Code Online (Sandbox Code Playgroud)
然后使用 electro-winstaller 创建应用程序的安装程序。
try {
await electronInstaller.createWindowsInstaller({
appDirectory: packagedLocation,
outputDirectory: installerLocation,
authors: 'Author',
exe: 'myapp.exe'
});
} catch (e) {
console.log(`Failure: ${e.message}`);
}
Run Code Online (Sandbox Code Playgroud)
当运行创建安装程序的代码时,exe 和 msi 安装程序都未正确创建。创建的Setup.exe只有大约200 KB。尝试运行 exe 会生成一个对话框,其中显示:This is a dummy update.exe. If you are seeing this, your build did not correctly replace the IDR_UPDATE_ZIP resource. Command Line: '--install .'
。Squirrel 或构建脚本的日志中没有给出任何错误。
通过测试,我发现如果我打包的应用程序的大小太大,就会发生这种情况。我的应用程序包含大约 3 GB 的资源。我需要将这些资源作为安装程序的一部分包含在内,而不是根据需要下载,因为该应用程序旨在无需访问互联网即可运行。这些资源的大小已经优化,我无法从我的应用程序中删除任何资源。
出于测试目的,如果我随机删除其中一些资源,直到打包应用程序的大小小于 1 GB,则 Electron-winstaller 将正确创建安装程序,不会出现任何问题。似乎不是任何特定资源导致了该错误。
有什么方法可以在不阻止创建安装程序的情况下将这些资源包含在我的应用程序中?
更新 …
我制作了一个需要加载预加载 js 文件的小型 Electron 应用程序。
当我用 启动应用程序时electron .
,它会找到该文件,但是当应用程序被打包时,它却找不到。
调用是在这里进行的:
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: false,
nativeWindowOpen: true,
webSecurity: false,
preload: path.join(__dirname, 'preload.js')
}
})
Run Code Online (Sandbox Code Playgroud)
我的简化 package.json:
"name": "app",
"version": "1.0.0",
"main": "main.js",
"scripts": {
"start": "electron .",
"build": "electron-packager . --platform=win32 --arch=x64 --overwrite"
}
"devDependencies": {
"electron": "^1.8.4",
"electron-packager": "^12.0.1",
}
Run Code Online (Sandbox Code Playgroud)
我的项目结构:
- 节点模块
- main.js
- 预加载.js
- 包.json
我已经检查了结果,path.join
在这两种情况下,路径都是正确的,并且文件在那里。
我有一个用于 win .exe 和安装程序的电子构建文件,但图标不是我的。在我的 main.js 文件中,我有附加图标的代码,但我只能让它在 createWindow 函数内工作。在函数之外,我收到一条错误消息。.exe 将运行并且我得到我的图标,但我这样做时出错;安装程序根本无法工作。我已经尝试过几个教程,但没有一个能解决这个问题。
主文件
const {app, BrowserWindow, Tray} = require('electron')
const path = require('path')
const url = require('url')
let win
function createWindow () {
const appIcon = new Tray('icon/app.png')
win = new BrowserWindow({ width: 1920, height: 1080, icon: 'icon/app.ico' })
console.log(appIcon, win)
win.loadURL(url.format({
pathname: path.join(__dirname, 'app/app.html'),
protocol: 'file:',
slashes: true
}))
win.on('closed', () => {
win = null
})
}
app.on('ready', createWindow)
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
}) …
Run Code Online (Sandbox Code Playgroud) 在某些模块中有效@vercel/webpack-asset-relocator-loader
,在某些模块中无效。如果它不起作用,我必须使用此处的 electro-forge 文档中所述的外部配置。
如果资产重定位加载器不适用于您的本机模块,您可能需要考虑使用外部配置
所以最终发生的事情是我将模块放入外部配置中,如下所示:
// webpack.main.config.js
module.exports = {
// other webpack configs
externals: {
'active-win': 'commonjs2 active-win',
iohook: 'commonjs2 iohook',
'screenshot-desktop': 'commonjs2 screenshot-desktop',
},
};
Run Code Online (Sandbox Code Playgroud)
其作用是,每当使用这些模块时,它都会搜索 node_modules 文件夹。这在开发中有效,但应用程序打包后,node_modules 文件夹为空。
我尝试使用@timfish/forge-externals-plugin库,但它不适用于我使用的某些模块。
那么如何才能使 node_modules 文件夹包含在打包的应用程序中呢?我不确定这是电子配置还是 webpack 配置或两者兼而有之。谢谢...
我尝试使用 Electron forge 公证(代码签名)Electron Node.js 应用程序,按照Electron forge 官方指南中提到的选项使用应用程序特定的密码将其提交到 Mac App Store(MAS) ,但遇到错误 - “无法使用代码装订您的申请:66。无法下载票证。必须设置 CDHash。”
\n我的应用程序的 forge.config.js 文件如下(确保 appleId、appleIdPassword、teamId 准确):
\nmodule.exports = {\n packagerConfig: {\n osxSign: {},\n osxNotarize: {\n tool: \'notarytool\',\n appleId: \'******\',\n appleIdPassword: \'******\',\n teamId: \'******\',\n }\n },\n rebuildConfig: {},\n makers: [\n {\n name: \'@electron-forge/maker-squirrel\',\n config: {},\n },\n {\n name: \'@electron-forge/maker-zip\',\n platforms: [\'darwin\'],\n },\n {\n name: \'@electron-forge/maker-deb\',\n config: {},\n },\n {\n name: \'@electron-forge/maker-rpm\',\n config: {},\n },\n ],\n};\n
Run Code Online (Sandbox Code Playgroud)\n我的 Node.js 应用程序的 package.json …