#node.js #typescript
#node.js #машинописный текст #typescript
Вопрос:
Из-за разных версий узлов и разных несовместимостей ABI мне нужно загрузить аддон C относительно, потому что они расположены с разными версиями ABI в разных местах.
Но проблема, с которой я столкнулся, объясняется еще проще. Почему 2 следующих вызова отличаются друг от друга?
const nodegit = require("./../path/to/nodegit.node");
const nodegit = require("nodegit");
Afaik оба вызова загружают одну и ту же библиотеку. Но есть и разница. В качестве примера я хочу использовать Repository.init, который имеет следующий заголовок функции:
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. Я что-то упускаю или require
интерпретирую эту библиотеку по-другому, если она родственна?
Комментарии:
1. Почему вам нужно использовать относительный путь?
2. Потому что у меня разные версии ABI и разные версии узлов для моего проекта
3. Должно происходить что-то еще. Вы думаете, что получаете одну и ту же библиотеку, но, возможно, это не так.
4. Я тоже так думал, но я использовал Xcode Instruments и в Windows Process Monitor, чтобы проверить, загружен ли тот же
nodegit.node
файл. И вызов require также выполняется успешно, но вызов Repository.init завершается неудачно и отличается
Ответ №1:
Вызовы отличаются, потому require('nodegit')
что entrypoint переносит require("./../path/to/nodegit.node")
и обеспечивает лучшее взаимодействие с JavaScript. Вы можете увидеть это здесь: https://github.com/nodegit/nodegit/blob/master/generate/templates/templates/nodegit.js#L11-L23 . Было намного проще написать API на JavaScript, чем на C , и в конечном итоге именно поэтому он работает таким образом. Вы все равно можете использовать собственный двоичный файл напрямую, но вы получите опыт ближе к libgit2 без NodeGit API.
Ответ №2:
- «nodegit» является основной точкой входа пакета
- «./../path/to/nodegit.node» только собственное расширение
Комментарии:
1. Спасибо! Это очень помогло! Таким образом, я могу переместить все расширение C отдельно в другой каталог и загрузить это вместо этого?