【问题标题】:How to tell a native node module where the needed dlls are stored?如何告诉本地节点模块所需的 dll 存储在哪里?
【发布时间】:2020-06-21 12:50:16
【问题描述】:

我目前正在开发一个用于 Node.Js 和 Electron 的本机节点模块,它需要额外的 dll 才能工作(以及 Linux 和 Mac 上的任何等价物)。 我不是真正的 C++ 开发,我没有在互联网上找到这个问题的解决方案,所以我可能需要你的一些支持:)

因此,当所有内容都存储在同一个(工作)目录中时,它工作得很好,但这不是你可以长期使用的东西。 特别是当我将所有内容打包到一个可以用 NPM 加载的模块中时,带有它的 dll 的模块存储在一个子文件夹中,如“./node_modules/native-module/build/Release/adddon.node[或 dll]”。

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

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

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

PS:如果这很重要,我将使用 cmake-js 进行构建过程。

【问题讨论】:

    标签: javascript c++ node.js dll node-native-addon


    【解决方案1】:

    我通过在运行时使用 node.js API 扩展 Path 环境变量来“修复”了这个问题。至少在 Windows 下,本地 C++ 程序的默认行为是在路径和 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2010-09-25
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      相关资源
      最近更新 更多