Mit frisch installiertem node.js und Paketmanager npm hatte ich gerade einen seltsamen Fehler, als ich das Paket ffi installieren und benutzen wollte (mit diesem Paket kann man native Funktionen aus node.js heraus aufrufen):
> require("ffi") Error: Could not locate the bindings file. Tried: → /home/david/node_modules/ffi/node_modules/ref/build/binding.node → /home/david/node_modules/ffi/node_modules/ref/build/Debug/binding.node → /home/david/node_modules/ffi/node_modules/ref/build/Release/binding.node → /home/david/node_modules/ffi/node_modules/ref/out/Debug/binding.node → /home/david/node_modules/ffi/node_modules/ref/Debug/binding.node → /home/david/node_modules/ffi/node_modules/ref/out/Release/binding.node → /home/david/node_modules/ffi/node_modules/ref/Release/binding.node → /home/david/node_modules/ffi/node_modules/ref/build/default/binding.node → /home/david/node_modules/ffi/node_modules/ref/compiled/0.6.12/linux/x64/binding.node at bindings (/home/david/node_modules/ffi/node_modules/bindings/bindings.js:88:9) at Object. (/home/david/node_modules/ffi/node_modules/ref/lib/ref.js:5:47) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:32) at Function._load (module.js:308:12) at Module.require (module.js:354:17) at require (module.js:370:17) at Object. (/home/david/node_modules/ffi/lib/ffi.js:6:11) at Module._compile (module.js:441:26)
Aha, es fehlt also irgendeine komische „Bindings-Datei“. Um den Fehler zu beheben, braucht man das Paket node-gyp, das einfach mit npm install -g node-gyp
global installiert werden kann.
Nun muss man das Tool node-gyp
an zwei verschiedenen Stellen aufrufen, damit diese Bindings-Datei erzeugt wird, nämlich einmal im Verzeichnis ffi
selbst und einmal in ffi/node_modules/ref
:
david@webserver:~# cd node_modules/ffi/ david@webserver:~/node_modules/ffi# node-gyp rebuild [...] david@webserver:~/node_modules/ffi# cd node_modules/ref/ david@webserver:~/node_modules/ffi/node_modules/ref# node-gyp rebuild [...]
Anschließend sollte das ffi-Modul korrekt geladen werden können.