angular 9 + электрон + последовательный порт - PullRequest
0 голосов
/ 29 мая 2020

У меня возникла проблема с запуском последовательного порта с angular 9.

Я написал свое приложение Angular на основе этого репо https://github.com/maximegris/angular-electron.git

Я расширил файл Electron.service.ts последовательным портом, как здесь Angular (5) -Electron Serialport Support

import { Injectable } from "@angular/core";

// If you import a module but never use any of the imported values other than as TypeScript types,
// the resulting javascript file will look as if you never imported the module at all.
import { ipcRenderer, webFrame, remote } from "electron";
import * as childProcess from "child_process";
import * as fs from "fs";
import * as SerialPort from "serialport";

@Injectable({
  providedIn: "root",
})
export class ElectronService {
  ipcRenderer: typeof ipcRenderer;
  webFrame: typeof webFrame;
  remote: typeof remote;
  childProcess: typeof childProcess;
  fs: typeof fs;
  serialPort: typeof SerialPort;
  private port;

  get isElectron(): boolean {
    return !!(window && window.process && window.process.type);
  }

  constructor() {
    // Conditional imports
    if (this.isElectron) {
      this.ipcRenderer = window.require("electron").ipcRenderer;
      this.webFrame = window.require("electron").webFrame;
      this.remote = window.require("electron").remote;
      this.childProcess = window.require("child_process");
      this.fs = window.require("fs");
      this.serialPort = window.require("serialport");
      this.port = window.require("serialport").SerialPort;
    }
  }

  connectToSerialPort(comPort) {
    if (this.isElectron && comPort > "") {
      this.port = new SerialPort(comPort, { baudRate: 9600 }, (err) => {
        if (err) {
          return console.log("Error: ", err.message);
        }
      });
      // this.port = new SerialPort(comPort, { baudRate: 9600 }, (err) => {
      //   if (err) {
      //     return console.log("Error: ", err.message);
      //   }
      // });
      // this.port.write("main screen turn on", function (err) {
      //   if (err) {
      //     return console.log("Error on write: ", err.message);
      //   }
      //   console.log("message written");
      // });
    }
  }
}

Когда я раскомментирую следующую часть, приложение запускается, и я вижу массив с компиляторами.

this.port = new SerialPort(comPort, { baudRate: 9600 }, (err) => {
        if (err) {
          return console.log("Error: ", err.message);
        }
      });

Но когда я пытаюсь подключить SerialPort с помощью приведенного выше кода, я получаю некоторые ошибки при компиляции ...

ERROR in ./node_modules/serialport/lib/bindings/linux-list.js
    Module not found: Error: Can't resolve 'child_process' in 'C:\Users\Mitch\Documents\DEV\Aurin\node_modules\serialport\lib\bindings'
    ERROR in ./node_modules/serialport/lib/bindings/unix-write.js
    Module not found: Error: Can't resolve 'fs' in 'C:\Users\Mitch\Documents\DEV\Aurin\node_modules\serialport\lib\bindings'
    ERROR in ./node_modules/serialport/lib/bindings/unix-read.js
    Module not found: Error: Can't resolve 'fs' in 'C:\Users\Mitch\Documents\DEV\Aurin\node_modules\serialport\lib\bindings'
    ERROR in ./node_modules/serialport/node_modules/bindings/bindings.js
    Module not found: Error: Can't resolve 'fs' in 'C:\Users\Mitch\Documents\DEV\Aurin\node_modules\serialport\node_modules\bindings'

Далее, Я попытался установить https://github.com/angular-guru/electron-builder и изменил свой angular. json

"build": {
    "builder": "@angular-guru/electron-builder:build",
    ...
}
"serve": {
    "builder": "@angular-guru/electron-builder:dev-server",
    ...
}
"test": {
    "builder": "@angular-guru/electron-builder:karma",
    ...
}

После этого компиляция прошла нормально, но в консоли появилась ошибка

Uncaught TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined
    at validateString (internal/validators.js:112)
    at dirname (path.js:583)
    at Function.DDRE.e.getRoot (main.1b61050caa329e0dd23d.js:1)
    at e (main.1b61050caa329e0dd23d.js:1)
    at Object.B8w1 (main.1b61050caa329e0dd23d.js:1)
    at l (runtime.7d7e9038a1cdbceb3d53.js:1)
    at Object.PMc/ (main.1b61050caa329e0dd23d.js:1)
    at l (runtime.7d7e9038a1cdbceb3d53.js:1)
    at Object.rGkW (main.1b61050caa329e0dd23d.js:1)
    at l (runtime.7d7e9038a1cdbceb3d53.js:1)

Я пробовал еще кое-что, понизить уровень последовательного порта, понизить версию электронного порта .. но без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...