2016-07-26 3 views
2

HintergrundPackaged Electron App kann nicht Modul finden Sqlite3

Innerhalb einer Electron App, sqlite3 nicht direkt nach npm install --save funktioniert. Ich habe es funktioniert nach einigen Web-Forschung, indem Sie:

(1) downgrade meine Knoten-Version (über n), um Electron's Knoten Version entsprechen; und

(2) Wiederaufbau SQLite mit den richtigen Modulnamen/Zielen mit diesem package.json Skript: "rebuild-sqlite3": "cd node_modules/sqlite3 && npm run prepublish && node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-darwin-x64 && node-gyp rebuild --target=1.2.6 --arch=x64 --target_platform=darwin --dist-url=https://atom.io/download/atom-shell --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.2-darwin-x64"

Danach, Sqlite3 arbeitet in der Entwicklung (das heißt, wenn ich electron . im Projektverzeichnis laufen).

Problem

ich die App mit electron-packager Paket: "./node_modules/.bin/webpack -p && ./node_modules/electron-packager/cli.js ./ --out ./bin --platform=darwin --arch=x64 --version=1.2.6 --overwrite --ignore=\"ignore|bin|node_modules\""

Wenn ich die App mit einem Doppelklick auf das erstellte (appName) .app öffnen, klagt die Konsole: `Nicht abgefangene Fehler: nicht gefunden

Modul

Frage

Wie kann ich sqlite3 erhalten in der letzten packag gefunden werden ed Produkt? Sogar "Hacks" oder Workarounds sind willkommen, da ich verschiedene Fehlerbehebungen ausprobiert habe.

+0

Bitte benutzen Sie finde eine Lösung? Ich stehe vor dem gleichen Problem und das scheint die Frage zu sein, die es am zutreffendsten beschreibt. Diese Frage verdient und beantwortet :) –

+0

Dies war vor einer Weile. Ich habe es schließlich funktioniert, aber erinnere mich nicht an die Schritte. Sie waren der von Adi hier geposteten Lösung ähnlich: https://stackoverflow.com/questions/38716594/electron-app-cant-find-sqlite3-module – Aaron

Antwort

1

Teilt die --ignore=\"ignore|bin|node_modules\" Sie electron-packager passieren alles im node_modules dir ignorieren, die Stelle, wo das sqlite3 Modul installiert ist?

+0

Danke, ich werde das zuerst ausprobieren. Der Packungsbefehl, den ich verwendet habe, wurde einem Web-Beispiel entnommen. Ich könnte einige falsche Annahmen darüber gemacht haben. – Aaron

+0

Ich habe genau das gleiche Problem, aber ich habe nichts bei ignoriert node_modules enthalten. Hast du eine Lösung gefunden? – CD1212

1

Ich hinterlasse diese Antwort für jemanden, der das gleiche Problem hat und seine Zeit verschwendet, um herauszufinden.

schritt1

npm install sqlite3

electron .

Ich erwartete, gut zu funktionieren. aber ich hatte einen Fehler 'nicht Knotenmodul sqlite3 finden'

schritt2

npm install electron-rebuild --save-dev

electron-rebuild -f -w sqlite3

electron .

es funktionierte.

aber wenn Sie 'Electron-Packager' verwendet, um eine ausführbare Datei zu packen und zu machen, hat es nicht funktioniert. derselbe Fehler ist aufgetreten.

"electron-packager . electron-tutorial-app --overwrite --asar --platform=win32 --arch=ia32 --icon=assets/icons/win/icon.ico --prune=true --out=new --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"Electron Test\"", 

step3

Ich verbrachte ziemlich viel Zeit, um herauszufinden. Am Ende habe ich es herausgefunden. die Lösung war mit Electron-Packager API und Integration AfterCopy mit Elektron-Wiederaufbau.

# build.js 
const packager = require('electron-packager'); 
const rebuild = require('electron-rebuild'); 

packager({ 
    dir: '../dir', 
    overwrite: true, 
    asar: true, 
    platform: 'win32', 
    arch: 'ia32', 
    icon: 'assets/icons/win/icon.ico', 
    prune: true, 
    out: 'hello', 
    executableName: 'hello', 
    afterCopy: [(buildPath, electronVersion, platform, arch, callback) => { 
    rebuild.rebuild({ buildPath, electronVersion, arch }) 
     .then(() => callback()) 
     .catch((error) => callback(error)); 
    }], 
}) 

node build.js

Referenz