Ricerca nel sito web

angular - Angular5 + Electron + Sqlite3


Da qualche giorno sto cercando di integrare la mia app Electron con SQLite. Ho già realizzato la build di SQLite con il seguente script:

"rebuild": "electron-rebuild -f -w sqlite3"

e riesco a connettermi al database, creare il file db ma dal javascript come segue:

 var sqlite3 = require('sqlite3').verbose();
            var db = new sqlite3.Database('./database2.sqllite3');

            db.serialize(function() {
            db.run("CREATE TABLE lorem (info TEXT)");

            var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
            for (var i = 0; i < 10; i++) {
                stmt.run("Ipsum " + i);
            }
            stmt.finalize();

            db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
                console.log(row.id + ": " + row.info);
            });
            });

     db.close();

Ma siccome sto usando l'approccio a componenti, vorrei creare un servizio TypeScript separato per fornire tutta la funzionalità del database e renderla accessibile dai componenti TS. Quindi ho appena provato a spostare questo codice in TS, ma non funziona. Tutti gli esempi dal web riguardano l'uso di queste righe in file js o nei componenti, ma penso che in versioni più vecchie di Angular sto ricevendo il seguente errore:

ERROR in src/app/database.service.ts(19,18): error TS2304: Cannot find name 'require'.

Sono riuscito a chiamare il file js dedicato dallo script ts ma con lo stesso effetto. Sembra che fosse troppo tardi per usare require? Qualcuno è riuscito a farlo funzionare?

Questa è la mia configurazione

"dependencies": {
    "@angular/animations": "^5.0.1",
    "@angular/common": "^5.0.0",
    "@angular/compiler": "^5.0.0",
    "@angular/core": "^5.0.0",
    "@angular/forms": "^5.0.0",
    "@angular/http": "^5.0.0",
    "@angular/platform-browser": "^5.0.0",
    "@angular/platform-browser-dynamic": "^5.0.0",
    "@angular/router": "^5.0.0",
    "@ngui/datetime-picker": "^0.16.2",
    "@types/lodash": "^4.14.85",
    "angular-svg-round-progressbar": "^1.2.0",
    "bootstrap": "^3.3.7",
    "commonjs": "latest",
    "core-js": "^2.4.1",
    "electron": "^1.8.1",
    "rxjs": "^5.5.2",
    "sqlite3": "^3.1.13",
    "xlsx": "^0.11.8",
    "zone.js": "^0.8.14"
  },
  "devDependencies": {
    "@angular/cli": "1.5.0",
    "@angular/compiler-cli": "^5.0.0",
    "@angular/language-service": "^5.0.0",
    "@types/jasmine": "~2.6.3",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~8.0.50",
    "codelyzer": "~4.0.1",
    "electron-rebuild": "^1.6.0",
    "jasmine-core": "^2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.2.0",
    "ts-node": "~3.3.0",
    "tslint": "~5.8.0",
    "typescript": "~2.6.1"
  }

Saluti, Jan