如何告诉本机节点模块所需的dll存储在哪里?

我目前正在开发要在Node.Js和Electron中使用的本机节点模块,该模块需要其他dll才能工作(以及Linux和Mac上的任何等效文件)。 我不是很喜欢C ++开发,也没有在互联网上找到这个问题的解决方案,所以我可能需要您的支持:)

因此,当所有内容都存储在同一(工作)目录中时,它会很好地工作,但是从长远来看,这不是您可以使用的。 尤其是当我将所有内容打包到可以通过NPM加载的模块中时,带有其dll的模块将存储在一个子文件夹中,例如“ ./node_modules/native-module/build/Release/adddon.node[or dll]”。>

我可以轻松地将模块包含在require中,但是它再也找不到任何dll,因为如果我正确理解C ++行为,它只会在PATH和当前工作目录(即Electron或Node.js是执行)。

我的第一个解决方法是将cwd更改为所有dll所在的“ Release”文件夹。 但是,当您喜欢使用webpack的热重载功能时,更改cwd会变得非常混乱,我将其用于开发目的。 您始终必须检查cwd是否已更改,它不再能正确显示页面,我真的认为这不是解决方法。

所以我的问题是,动态告诉节点模块dll存储在哪里的正确方法是什么? 预先感谢。

PS:如果重要的话,我正在使用cmake-js进行构建。

iCMS 回答:如何告诉本机节点模块所需的dll存储在哪里?

我通过在运行时使用node.js API扩展Path环境变量来“解决”此问题。至少在Windows下,本机C ++程序的默认行为是在Path和CWD中查找Dll。

如果有人感兴趣,这是我的代码:

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://www.f2er.com/2087834.html

大家都在问