После объединения приложения узла в исполняемый файл, он ищет файл .node, путь которого жестко запрограммирован на компьютер, на котором он был собран с помощью node-gyp - PullRequest
0 голосов
/ 26 июня 2018

У меня есть приложение узла, которое я объединяю в .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 ++, это не вариант.

1 Ответ

0 голосов
/ 28 июня 2018

В конечном итоге я использовал native-ext-loader в моем webpack.config. module: { rules: [ { test: /\.node$/, loader: "native-ext-loader", options: { rewritePath: path.resolve('C:/Program Files (x86)/XXX/DeviceManager/build/Release') } } ] } Я жестко запрограммировал каталог установки, в который устанавливается .exe.

...