示例
740字约2分钟
2024-12-09
蓝牙示例问题
navigator.bluetooth.requestDevice
只能查询到协议为 4.0 或 4.1 的蓝牙设备。navigator.bluetooth.requestDevice
点击后,回调的是main.js
中的select-bluetooth-device
事件。- 因
select-bluetooth-device
回调事件中数据为空的时候没有返回值,导致再次点击报错Uncaught (in promise) NotFoundError: User cancelled the requestDevice() chooser.
ESM 模块路径问题
path.join(__dirname, 'preload.mjs')
改成 path.join(new URL('.', import.meta.url).pathname, 'preload.mjs')
时输出的目录路径前面多加了 /
, 原因如下:
new URL('.', import.meta.url).pathname
的值:import.meta.url
返回的是一个以file://
开头的 URL 字符串,例如file:///d:/StudyProgram/electron/electron-app/main.mjs
。new URL('.', import.meta.url)
创建一个新的 URL 对象,表示当前目录,其pathname
属性会返回路径部分,例如/d:/StudyProgram/electron/electron-app/
。- 注意,这里的路径是以
/
开头的,因为它是从根目录开始的绝对路径。
path.join
的行为:path.join
会将多个路径片段连接成一个完整的路径。- 如果第一个路径片段是以
/
开头的,那么生成的路径也会以/
开头。
因此,path.join(new URL('.', import.meta.url).pathname, 'preload.mjs')
的结果会是 /d:/StudyProgram/electron/electron-app/preload.mjs
,前面的 /
是因为 new URL('.', import.meta.url).pathname
返回的路径是以 /
开头的。
解决方法
如果你不希望路径前面有多余的 /
,可以使用 path.normalize
来规范化路径:
path.normalize(path.join(new URL('.', import.meta.url).pathname, 'preload.mjs'))
electron-forge 打包错误:
An unhandled error has occurred inside Forge:
An error occured while making for target: squirrel
Failed with exit code: 1
Output:
test.nuspec
Authors is required.
Description is required.
从错误提示可以看出 Authors 和 Description 是必须的,如果前面执行 npm init
的时候,使用的是 -y
默认创建 package.json
,author
和 description
选项都是空,因此需要手动填写。