我目前正在开发一个在Node.Js和Electron中使用的本机节点模块,它需要额外的dll才能工作(无论在Linux和Mac上的等价物是什么)。我对C++开发不是很感兴趣,也没有在互联网上找到这个问题的解决方案,所以我可能需要您的一些支持:)
因此,当所有内容都存储在相同的(工作)目录中时,它工作得很好,但从长远来看,这不是您可以使用的东西。特别是当我把所有东西都打包到一个可以用NPM加载的模块中时,模块和它的dll被存储在一个子文件夹中,比如"./node_modules/native-module/build/Release/adddon.nodeor dll“。
我可以很容易地在require中包含这个模块,但是它再也找不到任何dlls了,因为如果我正确地理解了C++的行为,它只会在路径和当前工作目录(执行电子邮件或Node.js的地方)中查找dlls。
我的第一个解决办法是将cwd更改为所有dlls所在的"Release“文件夹。但是,当您喜欢使用webpack的热重新加载功能时,更改cwd会变得非常混乱,我将其用于开发目的。你总是必须检查cwd是否已经改变,它不再正确地显示页面,我真的认为这样做是不正确的。
所以我的问题是,动态地告诉节点模块dlls存储在哪里的正确方法是什么?提前谢谢。
PS:如果cmake-js很重要,我在构建过程中使用cmake-js。
发布于 2020-06-23 01:28:29
我通过在运行时使用node.js API扩展Path环境变量“修复”了这个问题。至少在Windows下,在路径和CWD中查找Dlls是原生C++程序的默认行为。
这是我的代码,如果有人感兴趣的话:
let currentPath = process.env.Path;
let dllDirectory = path.dirname( path.resolve(require.resolve('your-package-name/package.json'))) + `${path.sep}build${path.sep}Release`
process.env.Path = currentPath + dllDirectory;https://stackoverflow.com/questions/62498738
复制相似问题