Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Electron在Windows上运行SQLlite 3-动态链接库(DLL)初始化例程失败_Node.js_Sqlite_Electron - Fatal编程技术网

Node.js Electron在Windows上运行SQLlite 3-动态链接库(DLL)初始化例程失败

Node.js Electron在Windows上运行SQLlite 3-动态链接库(DLL)初始化例程失败,node.js,sqlite,electron,Node.js,Sqlite,Electron,这跟这个差不多 ELECTRON\u ASAR.js:173 返回old.apply(这个,参数) ^ 错误:动态链接库(DLL)初始化例程失败。 \\?\C:\workspace\client\client\desktop\node\u modules\sqlite3\lib\binding\node-v57 -win32-x64\node\u sqlite3.node at process.module.(匿名函数)[as dlopen](ELECTRON_ASAR.js:173:20) 在

这跟这个差不多

ELECTRON\u ASAR.js:173
返回old.apply(这个,参数)
^
错误:动态链接库(DLL)初始化例程失败。
\\?\C:\workspace\client\client\desktop\node\u modules\sqlite3\lib\binding\node-v57
-win32-x64\node\u sqlite3.node
at process.module.(匿名函数)[as dlopen](ELECTRON_ASAR.js:173:20)
在Object.Module.\u extensions..节点(Module.js:671:18)
at Object.module.(匿名函数)[as.node](ELECTRON_ASAR.js:173:20)
在Module.load(Module.js:561:32)
在tryModuleLoad时(module.js:504:12)
在Function.Module.\u加载(Module.js:496:3)
at Module.require(Module.js:586:17)
根据需要(内部/module.js:11:18)
反对


这最终成为我这边一堆不同问题的混搭。我将从最简单的开始,然后从那里开始

站台 您在那里的错误表明它需要
node-v57-win32-x64
,但如果您使用的是Electron,则它应该是
Electron-v2.0-win32-x64
(或者
Electron-v1.7-win32-x64
,如果您使用的是旧版本)。我也遇到了这个问题,因为我正在子进程中运行
sqlite3
。Electron中的子进程处于完整节点上下文中,而不是Electron(浏览器或节点+浏览器)上下文中。我通过一个环境变量将Electron版本从主浏览器进程(
process.versions.Electron
)传递到子进程,并在子进程中将其设置为
process.versions.Electron
,解决了这个问题

警告:这是一个黑客攻击,因为我没有在这个过程中使用任何期望全电子环境的东西。这实际上只是为了让它找到正确的本机绑定。一个更正确的解决方法是研究如何制作
electron-builder
build
node-v57-win32-x64

说到这里,让我们接下来创建这些

安装后 当运行
npm安装
warn安装
时,应尝试重建本机依赖项。如果您有一个
project/app
目录,它们将被放置在
project/app/node\u modules/
中。否则,它们将进入
项目/节点\u模块

传递依赖 在我的例子中,
sqlite3
实际上是依赖项集中另一个包的可传递依赖项。虽然Linux/OS X上的
electron builder
正确地选择了这些选项,并在安装程序创建过程中显示了这些选项:

• rebuilding native production dependencies platform=linux arch=x64
• rebuilding native dependency name=sqlite3
Windows版本显示:

• no native production dependencies
这是通过将可传递依赖项添加为直接依赖项来修复的。在我这样做之后,electron builder开始收集包进行编译,并抛出错误

Windows构建 要修复这些错误,请执行以下操作:

  • 安装python(我使用了最新的2.7)
  • 安装并重新启动
  • 再次运行
    postinstall
    脚本
就在这一点上,我说我这边的问题“解决了一半”。这应该是基本电子项目设置的完整解决方案

纱线工作区 我使用“纱线工作区”功能,我的项目设置如下:

yarn-workspace-project/
  workspace/
    project/
      web-app/
    project-electron/
      app/
对于这种设置,
纱线安装
通常在
纱线工作区项目
纱线工作区项目/工作区
目录中运行,而不是在每个项目中运行。这将在
warn workspace项目/node\u modules
处生成一个提升的
node\u modules/
目录。创建打包版本时,
electron builder
从该提升位置抓取依赖项,然后一切运行

但是,在
projectelectron
中运行启动脚本时,
electron.
在查找本机绑定时遇到一些问题。使用sqlite3的软件包安装在
纱线工作区项目/node_模块
下,因此将
sqlite3
解析为
纱线工作区项目/node_模块/sqlite3
。这在
纱线安装中肯定存在,但是电子绑定被放入
纱线工作区项目/workspace/project-electron/app/node\u modules/sqlite3


有多种显而易见的解决方案,所以我将把它作为练习留给读者。这里的关键问题是,为
node-v57-win32-x64
下载的默认绑定(我想?我不记得它们是构建的)在Windows 10中无法像在Linux/OS X中一样正常工作,即使错误表明它们不存在(它们确实存在)。

我有这个确切的问题,我已经解决了一半。它现在可以在打包的安装程序版本中工作,但在开发版本中仍然会出现相同的错误。当我找到答案的时候,我会发布一个答案。我放弃了使用更好的sqlite,它的工作效果更好,因为它已经过时,并且在6以上的任何版本的节点上都不工作。考虑到它在Mac/Linux上工作得很好,这是没有意义的。这对我来说也不是一个选项,因为它是一个可传递的依赖项。
• no native production dependencies
yarn-workspace-project/
  workspace/
    project/
      web-app/
    project-electron/
      app/