首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉本机节点模块所需的dll存储在哪里?

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

Stack Overflow用户
提问于 2020-06-21 20:50:16
回答 1查看 399关注 0票数 0

我目前正在开发一个在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。

EN

回答 1

Stack Overflow用户

发布于 2020-06-23 01:28:29

我通过在运行时使用node.js API扩展Path环境变量“修复”了这个问题。至少在Windows下,在路径和CWD中查找Dlls是原生C++程序的默认行为。

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

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62498738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档