전자와 함께 sqlite3 모듈을 사용하는 방법은 무엇입니까?


88

npm을 통해 설치된 sqlite3 패키지를 명령으로 사용 하는 전자 를 사용 하여 데스크톱 앱을 개발하고 싶습니다.

npm install --save sqlite3

그러나 전자 브라우저 콘솔에서 다음 오류가 발생합니다.

Uncaught Error: Cannot find module 'E:\allcode\eapp\node_modules\sqlite3\lib\binding\node-v45-win32-x64\node_sqlite3.node'

내 개발 환경은 Windows 8.1 x64 노드 버전 12.7입니다.

package.json 파일은 다음과 같습니다.

{
  "name": "eapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron-prebuilt": "^0.32.1"
  },
  "dependencies": {
    "angular": "^1.3.5",   
    "sqlite3": "^3.1.0"
  }
}

index.js 파일

var app = require('app');
var BrowserWindow = require('browser-window'); 
require('crash-reporter').start();
var mainWindow = null;


app.on('window-all-closed', function() {  
    if (process.platform != 'darwin') {
        app.quit();
    }
});

app.on('ready', function() {
    // Create the browser window.
    mainWindow = new BrowserWindow({width: 800, height: 600}); 
    mainWindow.loadUrl('file://' + __dirname + '/index.html');   
    mainWindow.openDevTools();  
    mainWindow.on('closed', function() {       
        mainWindow = null;
    });
});

my.js 파일

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

db.serialize(function() {
    db.run("CREATE TABLE if not exists 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();

index.html 파일

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<div >
    <div>
        <h2>Hello</h2>
    </div>

</div>
<!--<script src="js/jquery-1.11.3.min.js"></script>-->
<script src="js/my.js"></script>
</body>
</html>

답변:


125

전자와 함께 SQLite를 사용하는 가장 쉬운 방법은 electron-builder.

먼저 package.json에 설치 후 단계를 추가합니다.

"scripts": {
   "postinstall": "install-app-deps"
   ...
}

그런 다음 필요한 종속성을 설치하고 빌드하십시오.

npm install --save-dev electron-builder
npm install --save sqlite3
npm run postinstall

electron-builder는 Electron 바인딩에 대한 올바른 이름으로 플랫폼 용 네이티브 모듈을 빌드합니다. 그런 다음 require정상적으로 코드에서 할 수 있습니다 .

github repo블로그 게시물을 참조하십시오 .이 문제도 알아내는 데 꽤 오랜 시간이 걸렸습니다.


1
당신의 사용 전자 보일러 - SQLite는 것은 참으로 쉬운 방법이지만,와npm install
베르나르도 라모스

1
'npm run postinstall'을 실행할 때 "이 솔루션에서 프로젝트를 한 번에 하나씩 빌드합니다. 병렬 빌드를 사용하려면"/ m "스위치를 추가하십시오."라는 오류가 발생했습니다.
chirag

이것은 내 가죽을 한 번이 아니라 두 번 저장했습니다!
John Nesbitt

--save sqlite3옵션이 첫 번째 줄 (사용 --save-dev electron-builder) 에 안정적으로 태그 될 수 있는지 여부를 아는 사람이 npm install있습니까?
Phillip

이것은 나를 위해 작동하지 않습니다. '.. / .. / nan / nan_object_wrap.h : 67 : 18 : error :'class Nan :: Persistent <v8 :: Object> '와 같은 오류가 발생합니다 .'MarkIndependent'라는 멤버가 없습니다. `
Michael

21

기본 노드 sqlite3 모듈을 권장하지 않습니다. 전자와 함께 작동하려면 재건이 필요합니다. 이것은 할 엄청난 고통입니다-적어도 나는 그것을 작동시킬 수 없으며 창문에서 모듈을 다시 빌드하는 것에 대한 지침이 없습니다.

대신 JavaScript로 100 % 컴파일 된 sqlite3 인 kripken의 'sql.js'모듈을 살펴보십시오. https://github.com/kripken/sql.js/


3
Electron 문서는 번들로 제공되는 네이티브 모듈을 사용하기 위해 electron과 함께 작업하기 위해 다시 빌드해야한다는 것을 매우 분명합니다. 대부분의 시간에 작동하는 electron-rebuild 유틸리티를 사용하거나 gyp 플래그를 수동으로 설정하십시오. electron.atom.io/docs/tutorial/using-native-node-modules
Bret

1
응답이 느려서 죄송합니다. github.com/electron/electron-rebuild 는 개발중인 재 구축을위한 편리한 도구입니다. github.com/electron-userland/electron-builder/wiki/… 는 프로덕션 빌드를위한 다중 플랫폼 빌드 전략을 설명합니다. 일단 네이티브 deps를 도입하면 다른 OS에 대한 크로스 컴파일 기능을 잃게됩니다. github.com/nodejs/node-gyp#installation 에는 필요한 Windows 컴파일러 도구에 대한 적절한 문서가 있습니다.
Bret 2017 년

1
이 의견 중 어느 것도이 답변과 관련이 없습니다!
user3791372

14
sql.js는 파일 시스템에서 작동 할 수 없다는 점을 언급해야합니다. 데이터베이스를 변경해야 할 때마다 전체 내용을 디스크에 기록해야합니다. 대부분의 시나리오에서 거의 쓸모 없게 만듭니다.
mode777

3
sql.js는 재미를 위해 만들어진 장난감과 비슷합니다. 모든 데이터베이스를 메모리에 저장하기 때문에 NeDB 및 다른 nosql 데이터베이스보다 나을 수 없습니다. 그래서 그것을 사용할 이유가 없습니다. 작은 데이터베이스의 경우 NeDB와 같은 nosql을 사용하고, 더 큰 경우에는 sqlite를 컴파일해야합니다
Daimos

9

여기에서 두 가지 측면을 고려해야합니다.

  1. 설정 NODE_PATH: 전자가 모듈을 찾을 위치를 알 수 있습니다 (자세한 설명 은 이 답변 참조 ).
  2. 전자 헤더에 대한 네이티브 모듈 컴파일 : 공식 문서 참조

다음과 같은 질문을 확인하십시오.


내 팁lovefield (Google 제공)를 시도하는 것입니다.


Nodewebkit에서는 sqlite를 컴파일해야합니다. 전자에도 동일한 규칙이 적용됩니까?
Wexoni

@Wexoni AFAIK 네이티브 바인딩이있는 모든 노드 모듈은 전자 헤더에 대해 컴파일되어야합니다.
Yan Foto

1
@Wexoni 저는 NW와 함께 일한 적이 없지만 sqlite3전자에서 사용하기 전에 컴파일해야 한다는 것을 알고 있습니다. 질문을 올바르게 이해하고 있습니까?
Yan Foto

1
@YannBertrand 그들은 여전히 ​​자신의 헤더를 사용합니다. 그래서 나는 당신이 여전히 그들의 헤더에 대해 컴파일해야한다고 생각합니다.
Yan Foto

1
팁 lovefield에 감사드립니다. 정말 훌륭한 도서관입니다.
Mostasim Billah

7

나는 같은 문제가 있었다. 모든 것을 시도했고 이것이 나를 위해 일했습니다.

npm install --save sqlite3
npm install --save electron-rebuild
npm install --save electron-prebuilt
.\node_modules\.bin\electron-rebuild.cmd

. \ node_modules \ sqlite3 \ lib \ binding \ 위치에 "electron-v1.3-win32-x64"폴더가 생성되며, 이는 electron에서 sqlite3를 사용하는 데 사용됩니다.

응용 프로그램을 시작하면 지금 sqlite3를 사용할 수 있습니다.


그냥 빈 폴더,하지만 여전히 만들어 node_sqlite3.node그 안에 파일
메디 Dehghani

electron-prebuilt는 electron으로 이름이 변경되었습니다. 자세한 내용은 참조 electron.atom.io/blog/2016/08/16/npm-install-electron
야곱 넬슨

6

더 간단한 솔루션 :

  1. 전자 재건 설치 npm i electron-rebuild --save-dev
  2. 전자 재 구축 ./node_modules/.bin/electron-rebuild(또는 .\node_modules\.bin\electron-rebuild.cmdWindows) 실행
  3. " node_modules / sqlite3 / lib / binding / "으로 이동하여 " electron-v0.36-darwin-x64 " 폴더의 이름 을 " node- v47 -darwin-x64 "로 변경하십시오.

추신 : v47 은 내 버전이며, 좋은 것을 선택하도록주의하십시오 (귀하의 경우 v45 ).


4
세 번째 단계를 설명해 주시겠습니까? 이름을 바꾸는 이유는 무엇입니까?
m4heshd

3

이 오류도 발생합니다. 해결 방법은 다음과 같습니다 npm install --save-dev electron-rebuild . ./node_modules/.bin/electron-rebuild

에서 : https://electronjs.org/docs/tutorial/using-native-node-modules

추신 : 재건하는 동안 npm start전자 앱을 lanch하는 데 사용하지 마십시오 . 그렇지 않으면 재 구축 프로세스가 실패합니다.



3
npm install --save sqlite3
npm install --save-dev electron-rebuild

그런 다음 package.json의 스크립트에 다음 줄을 추가합니다.

"scripts": {
  "postinstall": "electron-rebuild",
  ...
},

그런 다음 다시 설치하여 사후 설치를 트리거하십시오.

npm install

electron-builder, electron-webpack 및 sequelize와 관련된 복잡한 사용 사례에서 나에게 완벽하게 작동합니다.

electron-webpack의 개발 모드와 Windows 및 Linux의 프로덕션 모드에서 작동합니다.


2

여기 에서 비슷한 답변을 살펴보십시오.

TL; DR

cd .\node_modules\sqlite3
npm install nan --save
npm run prepublish
node-gyp configure --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.3-win32-x64
node-gyp rebuild --target=1.3.2 --arch=x64 --target_platform=win32 --dist-url=http://electron.atom.io/ --module_name=node_sqlite3 --module_path=../lib/binding/electron-v1.3-win32-x64

3
스크립트 prepublish는 어떻게 생겼습니까?
Victor Ivens 2017 년

0

Visual Studio를 사용하여 수동으로 네이티브 모듈을 빌드 할 수 있습니다.

  1. Visual Studio 2019를 다운로드하십시오.
  2. "c ++로 데스크탑 개발"패키지를 설치하십시오. 설치 세부 정보 탭에서 "MSVC v140-VS 2015 C ++ 빌드 도구 (v14.00)"를 선택합니다.
  3. 프로젝트에서 electron-builder를 다운로드하십시오.
  4. package.json에서 스크립트를 만듭니다. "scripts": { "설치 후": "install-app-deps"}

  5. 그런 다음 스크립트를 실행하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.