Как указать собственному модулю узла, где хранятся необходимые библиотеки DLL? - PullRequest
0 голосов
/ 21 июня 2020

В настоящее время я разрабатываю собственный модуль узла для использования в Node.Js и Electron, которому для работы требуются дополнительные библиотеки DLL (и какой бы ни был эквивалент для Linux и Ma c). Я не особо занимаюсь разработкой на C ++, и я не нашел решения этого вопроса в inte rnet, поэтому мне может понадобиться ваша поддержка :)

Так что все работает хорошо, когда все работает хранятся в том же (рабочем) каталоге, но это не то, с чем вы можете работать в долгосрочной перспективе. Особенно, когда я упаковываю все в модуль, который может быть загружен с помощью NPM, модуль с его dll хранится в подпапке, например «./node_modules/native-module/build/Release/adddon.node[или dll]».

Я могу легко включить модуль с помощью require, но он больше не находит никаких dll, потому что, если я правильно понимаю поведение C ++, он просто смотрит в PATH и текущий рабочий каталог (который находится в Electron или Node.js выполняется) для dll.

Моя первая идея для обходного пути заключалась в том, чтобы просто изменить cwd на папку «Release», где находятся все библиотеки dll. Но изменение cwd становится действительно беспорядочным, когда вам нравится использовать функцию горячей перезагрузки webpack, которую я использую для целей разработки. Вы всегда должны проверять, был ли уже изменен cwd, он больше не отображает страницу правильно, и я действительно думаю, что это не способ сделать.

Итак, мой вопрос в том, какой способ исправления был бы динамически сообщать модулю узла, где хранятся библиотеки DLL? Заранее спасибо.

PS: Я использую cmake- js для процесса сборки, если это важно.

1 Ответ

0 голосов
/ 22 июня 2020

Я «исправил» эту проблему, расширив переменную среды Path во время выполнения с помощью node.js API. По крайней мере, под 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...