无法在electron渲染器进程中使用sqlite:“无法读取未定义的属性“\u handle”

无法在electron渲染器进程中使用sqlite:“无法读取未定义的属性“\u handle”,electron,node-sqlite3,Electron,Node Sqlite3,我正在尝试在electron应用程序中使用,但在应用程序窗口中,我在chrome控制台中遇到以下错误: Uncaught TypeError: Cannot read property '_handle' of undefined at file:///[...]/assets/js/bundle.js:38727:15 at Array.forEach (native) at module.exports (file:///[...]/assets/js/bundle.

我正在尝试在electron应用程序中使用,但在应用程序窗口中,我在chrome控制台中遇到以下错误:

Uncaught TypeError: Cannot read property '_handle' of undefined
    at file:///[...]/assets/js/bundle.js:38727:15
    at Array.forEach (native)
    at module.exports (file:///[...]/assets/js/bundle.js:38726:36)
    at Object.<anonymous> (file:///[...]/assets/js/bundle.js:34699:1)
    at Object.147._process (file:///[...]/assets/js/bundle.js:34999:4)
    at s (file:///[...]/assets/js/bundle.js:1:254)
    at file:///[...]/assets/js/bundle.js:1:305
    at Object.<anonymous> (file:///[...]/assets/js/bundle.js:32065:11)
    at Object.141.../package.json (file:///[...]/assets/js/bundle.js:32246:4)
    at s (file:///[...]/assets/js/bundle.js:1:254)
例如,仅当在React组件中的渲染器进程内使用const sqlite3=require'sqlite3'时,才会发生这种情况。在主进程中使用require'sqlite3'时,数据库调用不会出现任何问题

显示可以在渲染器进程中使用sqlite模块。我不明白为什么它在我的情况下不起作用

My package.json:

我使用:node 7.9.0,chrome 58.0.3029.110,electron 1.7.10


我在github上创建了一个问题。

它在渲染器进程中不起作用的原因是它通过browserify绑定,browserify旨在为浏览器生成绑定。您失败的特定代码依赖于node.js端的全局进程,因此browserify无法正确绑定它。此外,sqlite3模块内部有本机模块,无法绑定。其他绑定器(如webpack)有way externals选项来指定不尝试绑定它,如果它支持,您可能需要使用browserify以类似的方式进行配置


它还解释了示例应用程序工作的原因,它不为渲染器进程进行任何绑定。

相关:相关:看起来您是通过browserify绑定渲染器端代码,对吗?@OJKwon是的,我使用browserify为渲染器进程绑定一些React组件。electron不需要webpack,只要babel就足够了。如果你想挤出主进程和渲染器进程的启动性能,你可能还需要webpack。native node.js require非常昂贵,并且在应用程序启动时会花费很多。
module.exports = function (blocking) {
  [process.stdout, process.stderr].forEach(function (stream) {
    if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') {
      stream._handle.setBlocking(blocking)
    }
  })
}
{
  ...,
  "scripts": {
    "postinstall": "install-app-deps",
    "start": "electron .",
    "watch": "watchify app/app.js -t babelify -o assets/js/bundle.js --debug --verbose",
    "watch-style": "sass -r sass-globbing --watch style/application.scss:assets/css/bundle.css"
  },
  "devDependencies": {
    "babel-preset-stage-2": "^6.24.1",
    "electron-builder": "^19.49.4"
  },
  "dependencies": {
    "babel": "^6.23.0",
    "babel-core": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "babelify": "^8.0.0",
    "browserify": "^14.5.0",
    "electron": "^1.7.10",
    "electron-reload": "^1.2.2",
    "electron-window-state": "^4.1.1",
    "react": "^16.2.0",
    "sqlite3": "^3.1.13",
    "watchify": "^3.9.0",
    ...
  }
}