我使用的是 Mac M1,刚刚升级到 Node 14.17.6LTS。
我尝试使用电子构建器(22.11.7)重建better_sqlite3(7.4.3),但出现以下错误:
“v8::ArrayBuffer”中没有名为“GetContents”的成员
有什么想法如何解决这个问题吗?提前致谢!
Run Code Online (Sandbox Code Playgroud)gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ] SOLINK_MODULE(target) Release/.node CXX(target) Release/obj.target/fse/fsevents.o In file included from ../fsevents.cc:6: In file included from ../../nan/nan.h:2884: ../../nan/nan_typedarray_contents.h:34:43: error: no member named 'GetContents' in 'v8::ArrayBuffer' data = static_cast<char*>(buffer->GetContents().Data()) + byte_offset;
我正在尝试使用 Electron 构建 Windows 和 Mac OS 应用程序,但遇到了障碍。
简而言之,如果我尝试在 Mac OS Big Sur 上直接使用 Electron 运行应用程序(而不是构建 Mac 应用程序然后运行它),我会返回以下错误:
[35941:0821/171720.038162:FATAL:gpu_data_manager_impl_private.cc(415)] GPU process isn't usable. Goodbye.
Run Code Online (Sandbox Code Playgroud)
我使用以下命令直接使用 Electron 运行package.json
:
"scripts": {
...
"test": "electron main.js",
...
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以访问的唯一 Mac 操作系统环境是 Big Sur,因此还没有在早期版本的 Mac 操作系统上尝试过此操作,但从谷歌搜索看来,此错误可能与 Big Sur 加强的安全性/沙箱限制有关 - 但我猜测关于那个。
无论如何,经过一些谷歌搜索后,一些建议表明尝试在没有应用程序沙箱的情况下运行,即将其添加到main.js
:
app.commandLine.appendSwitch('no-sandbox');
Run Code Online (Sandbox Code Playgroud)
这一切都很好并且有效。
但是,如果我想构建和分发针对 Mac 应用商店的签名 Mac 应用程序或只是签名的沙盒 DMG 或 PKG 安装程序,那么这将不适合。
如果我删除上述no-sandbox
命令main.js
并在我的权利中指定应用程序沙箱,plist
如下所示,生成的签名应用程序将不会运行:
<key>com.apple.security.app-sandbox</key>
<true/>
Run Code Online (Sandbox Code Playgroud)
该应用程序尝试打开并关闭。我可以尝试在命令行中运行,open <appname>.app
但这会在控制台中引发以下错误:
The application cannot be …
Run Code Online (Sandbox Code Playgroud) 我有一个Electron项目,它使用NodeJS的child_process模块执行一些python脚本.我的python脚本位于我项目的根文件夹中.
这是我调用python脚本的方式:
let py = spawn('python',['ResolvePosition.py', obsFilePath, navFilePath])
py.stdout.on('data', data => console.log('data : ', data.toString()))
py.on('close', ()=>{
// Python ends, do stuff
})
Run Code Online (Sandbox Code Playgroud)
如果我运行我的电子应用程序,npm start
当我使用npm模块为Windows构建可执行文件electron-builder
并运行可执行文件时dist/win-unpacked/my-app.exe
,这将无法正常工作,这将无法正常工作,似乎我的脚本无法访问python ./my-script-py
.
那么,我如何使这段代码适用于已构建的项目?
晚上,
我正在研究使用电子来封装现有的angular2版本.我以为我干运行但实际包装似乎失败了(参见下面的最后一步),我想了解原因.这就是我正在做的......
创建项目
使用angular-cli启动新项目ng new electron-ng2-cli --style=scss
安装电子和电子建设者
编辑package.json
进行以下添加...
"main": "main.js"
"build":
{
"appId": "com.electrontest.testapp",
"mac": {
"category": "your.app.category.type"
}
}
Run Code Online (Sandbox Code Playgroud)
并将以下内容添加到scripts
...
"pack": "build --dir",
"dist": "build",
"electron": "electron main.js",
"postinstall": "install-app-deps"
Run Code Online (Sandbox Code Playgroud)
创建main.js
我刚刚从电子快速入门复制了代码.我做的唯一改变是index.html
我设置的位置/dist/index.html
修改基地
在index.html
改变<base="/">
到<base="./">
打包代码
运行ng build
.这将所有打包的代码放入/dist
测试运行
运行npm run electron
.这很好用.一个电子应用程序启动,我看到其中运行的角度内容.
为分发
运行创建应用程序npm run pack
以创建打包应用程序.包装似乎没问题 - 我收到一个关于丢失图标的警告,并警告我的代码是无符号的,但我猜他们不应该是致命的?
问题是,当我现在通过双击运行应用程序时,Finder
我在控制台中收到错误说: …
我想打开app并使用Electron(macOS)通过深度链接传递参数.
项目'electron-deep-linking-mac-win'在GitHub上.
编辑package.json
,按照'电子生成器'快速设置指南生成mac安装程序:
{
"name": "electron-deep-linking-osx",
"version": "1.0.0",
"description": "A minimal Electron application with Deep Linking (OSX)",
"main": "main.js",
"scripts": {
"start": "electron .",
"pack": "build --dir",
"dist": "build"
},
"repository": "https://github.com/oikonomopo/electron-deep-linking-osx",
"keywords": [
"Electron",
"osx",
"deep-linking"
],
"author": "GitHub",
"license": "CC0-1.0",
"devDependencies": {
"electron": "1.6.6",
"electron-builder": "17.1.2"
},
"build": {
"appId": "your.id",
"mac": {
"category": "your.app.category.type"
},
"protocols": {
"name": "myApp",
"schemes": ["myApp"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑main.js
,附加代码注册myapp
url方案协议,监听'open-url'事件 …
macos custom-protocol electron custom-url-protocol electron-builder
我设法使用电子构建器为Windows创建了一个.exe安装程序,我创建了2个package.json,如文档中所指出:
https://github.com/electron-userland/electron-builder.
"dist:win64": "./node_modules/.bin/build --platform win32 --arch x64"
Run Code Online (Sandbox Code Playgroud)
我的主package.json的构建部分是
"build": {
"app-bundle-id": "org.test.mytest",
"app-category-type": "public.app-category.graphics-design",
"osx": {
"contents": [
{
"x": 410,
"y": 150,
"type": "link",
"path": "/Applications"
},
{
"x": 130,
"y": 150,
"type": "file"
}
]
},
"win": {
"title": "My awesome app",
"version": "2.28.999.1",
"noMsi": false,
"authors": "Author"
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,我有.exe安装程序,但无法使用.msi安装程序将内容放在程序文件目录中.
相反,我最终安装在C:\ Users\UserHome\AppData\Local\electron文件夹中,安装程序如下所示.
有没有办法让一个真正的.msi安装程序使用电子生成器将内容放在Program文件夹中.唯一有效的项目是https://github.com/theodo/electron-boilerplate,但它使用的是电子生成器的旧版本.
在电子文档设置noMsi
为假,应该做的伎俩......
Should Squirrel.Windows create an MSI installer?
Run Code Online (Sandbox Code Playgroud) 我们有一个签署交易的电子加密应用程序(除此之外).
我们希望其他网站能够拥有一个打开该电子应用程序的按钮,预先填充了一些参数(交易信息).
流程是:
这可以在运行时或安装时完成.
app.setAsDefaultProtocolClient
用这个要点的代码调用,基本上是:
app.setAsDefaultProtocolClient("my-app")
Run Code Online (Sandbox Code Playgroud)
但是在我放入my-app://foo?bar=baz
Chrome浏览器之后,我得到以下弹出窗口,按下open-xdg什么都不做(除了解除弹出窗口)
也许有一种方法可以在安装时通过电子制造商这样做?
在此先感谢您的帮助,我不知道如何继续前进!
我用Electron构建了一个应用程序,并使用Electron-Builder创建了一个Squirrel windows安装程序和更新程序.这一切都很好,但我在调试我的应用程序的生产版本时遇到问题.
console.log
使用生产版本时,是否在磁盘上的某处写入了日志?如果是这样,我在哪里可以找到它们?或者在编译可执行文件时是否全部删除了?我的应用必须有某种日志文件吗?
我发现了SquirrelSetupLog,C:\Users\Tieme\AppData\Local\MyApp\SquirrelSetupLog
但这还不足以调试我的生产问题.
刚遇到电子日志.如果常规控制台日志确实没有写入磁盘某处,那可能会有效.
windows系统中的node.js可以在服务器启动前设置环境,如下:
set NODE_ENV=production
Run Code Online (Sandbox Code Playgroud)
该NODE_ENV
参数可以使用 innode.js
或electron
by process.env.NODE_ENV
。
但是当我通过 构建电子时electron-builder
,就像这样:
electron-builder build --windows
Run Code Online (Sandbox Code Playgroud)
如何设置环境变量?
更新:
可能无法将固定的环境变量传递给可执行文件electron-builder
。
可能只能手动加载一个环境文件,打包时修改,或者把参数预置到dev
状态。当没有状态时,它是production
。
electron ×10
electron-builder ×10
macos ×2
node.js ×2
angular ×1
angular-cli ×1
javascript ×1
logging ×1
native ×1
python ×1
v8 ×1