Node.js 为什么resolve(“/”/“…”)和resolve(“foo”)之间有区别 由于不同的节点版本和不同的ABI不兼容,我需要加载一个C++插件,因为它们在不同的位置上有不同的ABI版本。

Node.js 为什么resolve(“/”/“…”)和resolve(“foo”)之间有区别 由于不同的节点版本和不同的ABI不兼容,我需要加载一个C++插件,因为它们在不同的位置上有不同的ABI版本。,node.js,typescript,Node.js,Typescript,但我所面临的问题解释得更简单。为什么以下两个调用不同 const nodegit = require("./../path/to/nodegit.node"); const nodegit = require("nodegit"); Afaik两个调用加载同一个库。但这是有区别的。作为示例,我想使用具有以下函数头的: Repository.init(repo_path, 0).then(function(repository) { // Use re

但我所面临的问题解释得更简单。为什么以下两个调用不同

const nodegit = require("./../path/to/nodegit.node");
const nodegit = require("nodegit");
Afaik两个调用加载同一个库。但这是有区别的。作为示例,我想使用具有以下函数头的:

Repository.init(repo_path, 0).then(function(repository) {
  // Use repository
});
如果我现在称之为:

nodegit.Repository.init("/path/to/randm/dir", 0);
我得到一个例外:

Callback is required and must be a Function.
似乎返回的承诺变成了init函数的一个参数。我是否遗漏了某些内容,或者
是否要求
以不同的方式解释此库(如果是相对的?

  • “nodegit”是包的主要入口点
  • “/。/path/to/nodegit.node”仅为本机扩展名

调用不同,因为
require('nodegit')
entrypoint包装了
require(“./../path/to/nodegit.node”)
并提供了更好的JavaScript体验。您可以在这里看到:。在JavaScript中编写API比C++更容易,这就是为什么它以这种方式工作的原因。您仍然可以直接使用本机二进制文件,但在没有NodeGit API的情况下,您将获得更接近libgit2的体验。

为什么需要使用相对路径?因为我的项目有不同的ABI版本和不同的节点版本,所以必须要做些其他事情。您认为您得到的是相同的库,但可能不是。我也这么认为,但我使用了Xcode工具和Windows Process Monitor来验证是否加载了相同的
nodegit.node
文件。require调用也成功了,但是对Repository.init的调用失败了,并且是differenthanks!那帮了大忙!因此,我可以将整个C++扩展单独移动到另一个目录,然后加载这个目录?