У меня есть приложение узла, которое я объединяю в .exe и запускаю как службу Windows. Я включаю node_modules и node.exe, чтобы пользователю не нужно было устанавливать npm / node в своей системе. Это было нормально, пока мне не нужно было включить .dll. Я использую node-gyp и файл binding.gyp для создания файла .node, который я использую в приложении. Кажется, что node-gyp жестко кодирует абсолютные пути к машине, на которой создан файл .node. Поэтому, когда .exe пытается запустить на другом компьютере, он ошибочно ищет путь к моему компьютеру. Вот пример моего файла binding.gyp: {
"targets": [
{
"target_name": "interface",
"sources": [
"src/cfcInterface/interface.cpp"
],
"include_dirs": [
"<!@(node -p \"require('node-addon-api').include\")",
"include"
],
"dependencies": [
"<!(node -p \"require('node-addon-api').gyp\")"
],
"libraries": [
"<(module_root_dir)/lib/xxx.lib"
],
"copies": [
{
"destination": "<(module_root_dir)/build/Release",
"files": [
"<(module_root_dir)/lib/xxxxxxxxx.dll",
"<(module_root_dir)/lib/xxxxxxxx.dll",
"<(module_root_dir)/lib/xxxxxxx.dll",
]
}
],
"cflags!": ["-fno-exceptions"],
"cflags_cc!": ["-fno-exceptions"],
"defines": ["NAPI_CPP_EXCEPTIONS"]
}
]
}
Вот сообщение об ошибке при попытке запустить .exe: Ошибка: невозможно открыть C: \ Users \ xxxx \ Documents \ node-thin-client \ xxx-service \ build \ Release \ interface.node: Ошибка: указанный модуль не найден.
Вот как мне требуется файл в index.js: const interface = require('../build/Release/interface.node');
На моем компьютере все работает нормально, но при установке и запуске службы windows windows на другом компьютере он все еще ищет путь на моем компьютере.
Кто-нибудь знает, есть ли способ установить относительные / общие пути с помощью node-gyp? В зависимости от того, пользователь установил инструменты сборки node / npm / python / visual c ++, это не вариант.