这类似于此Electron Uncaught Error: A dynamic link library (DLL) initialization routine failed
ELECTRON_ASAR.js:173
return old.apply(this, arguments)
^
Error: A dynamic link library (DLL) initialization routine failed.
\\?\C:\workspace\client\client\desktop\node_modules\sqlite3\lib\binding\node-v57
-win32-x64\node_sqlite3.node
at process.module.(anonymous function) [as dlopen] (ELECTRON_ASAR.js:173:20)
at Object.Module._extensions..node (module.js:671:18)
at Object.module.(anonymous function) [as .node] (ELECTRON_ASAR.js:173:20)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:504:12)
at Function.Module._load (module.js:496:3)
at Module.require (module.js:586:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:\workspace\client\client\desktop\node_modules\sqlit
e3\lib\sqlite3.js:4:15)
at Object.<anonymous> (C:\workspace\client\client\desktop\node_modules\sqlit
e3\lib\sqlite3.js:190:3)
我已经尝试了本文中建议的所有内容以及我能找到的其他内容
我已经安装了electronic-rebuild并添加了“ rebuild”:“ electron-rebuild -f -w sqlite3 -V 1.7”
此程序运行无错误。
我尝试了“ postinstall”:“ install-app-deps”,
这没有帮助。
还有什么可以尝试的吗?
文件在其中。
答案 0 :(得分:2)
最终,这是我一堆不同问题的混搭。我将从最简单的开始,然后从那里开始。
那里的错误表明它想要node-v57-win32-x64
,但是如果您从Electron运行,则应该为electron-v2.0-win32-x64
(如果使用的是旧版本,则应该为electron-v1.7-win32-x64
)。我也遇到了这个问题,因为我在子进程中运行sqlite3
。 Electron中的子进程位于完整节点上下文中,而不是在Electron(浏览器或节点+浏览器)上下文中。通过将环境版本的电子版本从主浏览器进程(process.versions.electron
)传递到子进程并在子进程中的process.versions.electron
上进行设置,我解决了这个问题。
警告:这是一个HACK,可以正常工作,因为在此过程中我没有使用任何期望完整电子环境的东西。从字面上看,仅是为了使其找到正确的本机绑定。一个更正确的解决方法是研究改为electron-builder
构建node-v57-win32-x64
。
说到这,接下来我们来创建。
"scripts": {
...
"postinstall": "electron-builder install-app-deps"
}
这应该在运行npm install
或yarn install
时尝试重建本机依赖关系。如果您有project/app
目录,它们将被放置在project/app/node_modules/
中。否则,他们会进入project/node_modules
。
就我而言,sqlite3
实际上是我的依赖集中的另一个包的传递依赖。在Linux / OS X上的electron-builder
正确地拾取了它们并在安装程序创建过程中显示了这一点:
• rebuilding native production dependencies platform=linux arch=x64
• rebuilding native dependency name=sqlite3
Windows版本显示:
• no native production dependencies
此问题已通过将传递性依赖项添加为直接依赖项来解决。完成此操作后,电子组装人员开始拿起包装进行编译,并且吐出了错误。
要纠正这些错误:
postinstall
脚本在这一点上,我说这是我的“半解”。 应该是基本电子项目设置的完整解决方案。
我使用纱线工作区功能,我的项目设置如下:
yarn-workspace-project/
workspace/
project/
web-app/
project-electron/
app/
对于这种设置,yarn install
通常在yarn-workspace-project
或yarn-workspace-project/workspace
目录中运行,而不是在每个项目中运行。这将在node_modules/
处生成一个提升的yarn-workspace-project/node_modules
目录。创建打包版本时,electron-builder
从该悬挂的位置获取依赖项,一切正常运行。
但是,在project-electron
中运行我的启动脚本时,electron .
在查找本机绑定时遇到了一些问题。使用sqlite3的软件包安装在yarn-workspace-project/node_modules
下,因此将sqlite3
解析为yarn-workspace-project/node_modules/sqlite3
。每个yarn install
确实存在这种情况,但是电子束缚被放在yarn-workspace-project/workspace/project-electron/app/node_modules/sqlite3
中。
有很多明显的解决方案,所以我将其留给读者练习。这里的关键问题是,为node-v57-win32-x64
下载的默认绑定(我想呢?我不记得他们正在构建它们)在Windows 10上无法像在Linux / OS X上那样直接使用,即使错误表明它们不存在(它们确实存在)。