electron (9.0.3)node (v12.17.0) 使用sqlite3 踩坑


剛開始接觸electron ,踩到了electron-prebuilt的坑,簡單記錄下。

1、直接安裝

npm install sqlite3

electron .

 

 

報錯:'cannot find node module sqlite3'

2、重新編譯sqlite3

2.1


npm install electron-rebuild --save-dev
npm install sqlite3 --runtime=electron --target=9.0.3 --dist-url=https://atom.io/download/electron
electron-rebuild -f -w sqlite3

node_modules/.bin/electron.cmd .

或者:packge.json的script下面添加

"rebuild": "electron-rebuild -f -w sqlite3",
"postinstall": "electron-builder install-app-deps"

執行對應的命令

npm run rebuild


報錯:

App threw an error during load
Error: Cannot find module 'E:\*\node_modules\sqlite3\lib\binding\electron-v1.4-win32-x64\node_sqlite3.node'
    at Module._resolveFilename (module.js:455:15)
    at Function.Module._resolveFilename (E:\*\node_modules\electron-prebuilt\dist\resources\electron.asar\common\reset-search-paths.js:35:12)
    at Function.Module._load (module.js:403:25)
    at Module.require (module.js:483:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (E:\*\node_modules\sqlite3\lib\sqlite3-binding.js:4:15)
    at Module._compile (module.js:556:32)
    at Object.Module._extensions..js (module.js:565:10)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)

 

 2.2上面已經編譯成功,但是找不到electron-v1.4-win32-x64 ,同一目錄已經生成electron-v9.0-win32-x64,嘗試拷貝重命名electron-v1.4-win32-x64

App threw an error during load
Error: A dynamic link library (DLL) initialization routine failed.
\\?\E:\*\node_modules\sqlite3\lib\binding\electron-v1.4-win32-x64\node_sqlite3.node
    at Error (native)
    at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
    at Object.Module._extensions..node (module.js:583:18)
    at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
    at Module.load (module.js:473:32)
    at tryModuleLoad (module.js:432:12)
    at Function.Module._load (module.js:424:3)
    at Module.require (module.js:483:17)
    at Object.<anonymous> (E:\*\node_modules\sqlite3\lib\sqlite3-binding.js:4:15)

 

仍然報錯,庫版本不對

3、為何electron-v1.4-win32-x64?

node_modules/.bin/electron.cmd -v 出來的居然是V1.4.13

什么情況,我的electron版本是9.0.3啊

原來 electron-rebuild之后node_modules/.bin/electron.cmd版本居然會變

@ECHO off
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

"%_prog%"  "%dp0%\..\electron-prebuilt\cli.js" %*
ENDLOCAL
EXIT /b %errorlevel%
:find_dp0
SET dp0=%~dp0
EXIT /b

 


居然指向了electron-prebuilt,版本也是electron-prebuilt的。

可能是一個bug吧。手動改回

"%_prog%"  "%dp0%\..\electron\cli.js" %*

 

可以使用如下代碼測試下:

 

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(':memory:');


// 這段代碼用來測試 SQLite
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();

 

 

 

此時一切正常。

good luck

 

參考鏈接:

https://stackoverflow.com/questions/38600940/packaged-electron-app-cannot-find-module-sqlite3

https://stackoverflow.com/questions/38716594/electron-app-cant-find-sqlite3-module

https://juejin.im/entry/5b77cbf8f265da4325153f31

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM