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
buildnode-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/