electron - Quasar 框架、Electron 和 Serialport:indexOf 错误
问题描述
我正在使用 Quasar、Electron 和串行端口建立一个测试项目。使用最小串行端口测试启动应用程序时,出现以下错误:
vue-router.esm.js?85f8:2128 TypeError: Cannot read property 'indexOf' of undefined
at Function.getFileName (bindings.js?d8c5:178)
at bindings (bindings.js?d8c5:82)
at eval (win32.js?0965:1)
at Object../node_modules/@serialport/bindings/lib/win32.js (vendor.js:340)
at __webpack_require__ (app.js:854)
at fn (app.js:151)
at eval (index.js?3983:6)
at Object../node_modules/@serialport/bindings/lib/index.js (vendor.js:252)
at __webpack_require__ (app.js:854)
at fn (app.js:151)
当我只包含串行端口包而不做任何事情时,甚至会发生错误。这似乎是一个基本问题。重现问题的代码:
<script lang="ts">
import { Vue, Component } from 'vue-property-decorator';
import SerialPort from 'serialport';
@Component
export default class Index extends Vue {
test() {
console.log('test', SerialPort);
}
}
</script>
我尝试了在这里,Quasar 论坛等中可以找到的所有内容。pp:电子重建,尝试将串行端口配置为外部依赖项,...
我不太确定重建过程是否按预期工作,但我不知道要检查什么以确保它确实如此。带有串行端口的电子示例项目正在为我工作。也许它与类星体有关?
我可以获得有关重建过程的更多信息吗?我尝试了不同的组合来指定版本,但没有任何帮助。
我还在串行端口存储库中将这个问题作为问题提出,但将其添加到 vue.config.js 中不起作用,因为我使用 Quasar 作为 CLI 选项。
我认为主要问题是如何在 Quasar 到位时为电子正确重建串行端口,这似乎没有按预期工作。
解决方案
我在让 Serialport 在 Quasar 和 Electron 中运行时也遇到了一些麻烦,但我让它工作了。该解决方案不是很漂亮,将来可能会中断。
正如您所写,您需要运行电子重建。您可以通过运行“./node_modules/.bin/electron-rebuild”来执行它。您还应该在“脚本”部分中放入您的包 .json
"install": "electron-rebuild"
我使用 Electron 预加载脚本将串行端口放入窗口对象中。这是有关如何启用此功能的文档。在 electron-main.js 中,还需要添加以下行
app.allowRendererProcessReuse = false;
如果丢失,电子将无法加载。
在 electron-preload.js 中,把这个
window.serialport = require("serialport");
您现在可以通过 window.serialport 在您的 Quasar 项目中使用串行端口。
我遇到的另一个问题是 Quasar 在打包项目时更改了 package.json 并删除了安装脚本,因此 electron-rebuild 在构建时不会运行,并且打包版本也不起作用。我设法通过在 quasar.conf.js 的电子部分添加一个“beforePackaging”钩子来解决这个问题
//Top of the file
const path = require("path");
const crossSpawn = require("cross-spawn");
...
electron: {
...
beforePackaging(params) {
return new Promise(resolve => {
const runner = crossSpawn(
path.join("node_modules", ".bin", "electron-rebuild"),
[""],
{
stdio: "inherit",
stdout: "inherit",
stderr: "inherit",
cwd: params.unpackagedDir
}
);
runner.on("close", () => {
resolve();
});
});
},
}
也许有人对此有更好的解决方案,但我希望这会有所帮助。
推荐阅读
- java - Java:如何将我的数组打印到文本文件中?
- javascript - Storybook 没有拾取 scss 文件
- java - 当 JVM 进程的编译时结束和运行时开始时
- angular-cli - 如何解决 EPERM:角度不允许操作错误?
- java - 如何从 Java 中的不同文件导入函数
- c# - 有没有办法让多个数据字段合并在一起成为一个列表
- amazon-web-services - 如何通过登录获取 AWS 访问凭证?
- visual-studio-code - VS-Code 扩展,是注释中的插入符号吗?
- c# - 将 collectionView 组名称放在 Position.Start 上
- android - 如何在应用程序代码本身中使用 adb 命令卸载 android 应用程序?