Вероятно, есть очевидный ответ для кого-то, кто более знаком с NodeJS, чем я, но:
При запуске приложения, использующего пакет node-gyp, оно без проблем запускается с помощью
node ./src/index.js
Однако, запустив его с помощью очень простого package.json
start-script:
"scripts": {
"start": "node ./src/index.js"
}
в нпм:
npm start
npm info it worked if it ends with ok
npm info using npm@6.9.0
npm info using node@v11.10.1
npm info lifecycle rosbag2@0.1.0~prestart: rosbag2@0.1.0
npm info lifecycle rosbag2@0.1.0~start: rosbag2@0.1.0
> rosbag2@0.1.0 start /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2
> node ./src/index.js "./src/index.js"
internal/modules/cjs/loader.js:779
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: dlopen(/Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node, 1): Library not loaded: @rpath/librosidl_typesupport_cpp.dylib
Referenced from: /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node
Reason: image not found
и аналогично в пряже
yarn start
yarn run v1.13.0
warning package.json: No license field
$ node ./src/index.js ./src/index.js -d ../../../data/rosbag2/rosbag2_2019_03_09-21_54_44 -o ../../xviz-data/rosbag2/rosbag2_2019_03_09-21_54_44/
internal/modules/cjs/loader.js:779
return process.dlopen(module, path.toNamespacedPath(filename));
^
Error: dlopen(/Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node, 1): Library not loaded: @rpath/librosidl_typesupport_cpp.dylib
Referenced from: /Users/andreasklintberg/personal/xviz/examples/converters/rosbag2/node_modules/rosbags2_nodejs/build/Release/rosbags2_nodejs.node
Reason: image not found
Я знаю, что ошибка в том, что динамическая ссылка / @ rpath испорчена, и я думал, что это потому, что npm/yarn
портится с переменными env или что-то в этом роде, но при запуске yarn env
кажется, что все правильно.
Так что, я думаю, мне интересно, кто-нибудь знает, в чем разница - запускать его в нативном узле и использовать сценарий npm/yarn
для переноса начала? И почему эта разница портит @ rpath / dynamic linking?
Редактировать:
Мой index.js
файл очень прост, просто импортирует встроенный пакет node-gyp:
let RosbagDeserializer = require('../build/Release/rosbags2_nodejs.node');
const deserializer = new RosbagDeserializer.Rosbag2Wrapper();
Это рассматриваемый проект, https://github.com/klintan/rosbag2_nodejs