nodejs / node-gyp
node-gyp
ist ein plattformübergreifendes Kommandozeilenwerkzeug, das in Node.js geschrieben wurde, um native Addon-Module für Node.js zu kompilieren. Es enthält eine Vendored-Kopie desgyp-next -Projekts, das zuvor vom Chromium-Team verwendet wurde und erweitert wurde, um die Entwicklung von nativen Node.js-Addons zu unterstützen.
Beachten Sie, dass node-gyp
nicht verwendet wird, um Node.js selbst zu bauen.
Mehrere Zielversionen von Node.js werden unterstützt (d.h. 0.8
, …, 4
, 5
, 6
,etc.), unabhängig davon, welche Version von Node.js tatsächlich auf Ihrem System installiert ist (node-gyp
lädt die notwendigen Entwicklungsdateien oder Header für die Zielversion herunter).
Features
- Die gleichen Build-Befehle funktionieren auf jeder der unterstützten Plattformen
- Unterstützt das Targeting von verschiedenen Versionen von Node.js
Installation
Sie können node-gyp
mit npm
installieren:
npm install -g node-gyp
Abhängig von Ihrem Betriebssystem müssen Sie installieren:
Auf Unix
- Python v3.6, v3.7, v3.8, oder v3.9
make
- Eine geeignete C/C++ Compiler Toolchain, wie GCC
Unter macOS
ACHTUNG: Wenn Ihr Mac auf macOS Catalina (10.15) aktualisiert wurde, lesen Sie bitte macOS_Catalina.md.
- Python v3.6, v3.7, v3.8, oder v3.9
- Xcode
- Sie müssen auch die
XCode Command Line Tools
durch Ausführen vonxcode-select --install
installieren. Alternativ, wenn du bereits das vollständige Xcode installiert hast, kannst du sie unter dem MenüXcode -> Open Developer Tool -> More Developer Tools...
finden. In diesem Schritt werdenclang
,clang++
undmake
installiert.
- Sie müssen auch die
Unter Windows
Installieren Sie die aktuelle Version von Python aus dem Microsoft Store Paket.
Installieren Sie die Tools und die Konfiguration manuell:
- Installieren Sie die Visual C++ Build Environment: Visual Studio Build Tools (unter Verwendung des Workloads „Visual C++ build tools“) oder Visual Studio 2017 Community (unter Verwendung des Workloads „Desktop development with C++“)
- Starten Sie cmd,
npm config set msvs_version 2017
Wenn die obigen Schritte bei Ihnen nicht funktioniert haben, finden Sie weitere Tipps in den Node.js-Richtlinien für Windows von Microsoft.
Um natives ARM64 Node.js auf Windows 10 auf ARM zu zielen, fügen Sie die Komponenten „Visual C++ Compiler und Bibliotheken für ARM64“ und „Visual C++ ATL für ARM64“ hinzu.
Python-Abhängigkeit konfigurieren
node-gyp
erfordert, dass Sie eine kompatible Version von Python installiert haben, eine von: v3.6, v3.7, v3.8 oder v3.9. Wenn Sie mehrere Python-Versionen installiert haben, können Sie auf eine der folgenden Arten bestimmen, welche Python-Version node-gyp
verwendet werden soll:
- durch Setzen der
--python
-Kommandozeilenoption, z.B.
node-gyp <command> --python /path/to/executable/python
- Wenn
node-gyp
übernpm
aufgerufen wird und Sie mehrere Python-Versionen installiert haben, können Sie den ‚python‘-Konfigurationsschlüssel vonnpm
auf den entsprechenden Wert setzen:
npm config set python /path/to/executable/python
-
Wenn die Umgebungsvariable
PYTHON
auf den Pfad einer ausführbaren Python-Datei gesetzt ist, wird diese Version verwendet, sofern es sich um eine kompatible Version handelt. -
Wenn die Umgebungsvariable
NODE_GYP_FORCE_PYTHON
auf den Pfad einer ausführbaren Python-Datei gesetzt ist, wird diese anstelle eines der anderen konfigurierten oder eingebauten Python-Suchpfade verwendet. Wenn es sich nicht um eine kompatible Version handelt, wird keine weitere Suche durchgeführt.
Wie man es benutzt
Um Ihr natives Addon zu kompilieren, gehen Sie zuerst in sein Stammverzeichnis:
cd my_node_addon
Der nächste Schritt ist die Erzeugung der entsprechenden Projekt-Build-Dateien für die aktuelle Plattform. Verwenden Sie dazu configure
:
node-gyp configure
Die automatische Erkennung schlägt für Visual C++ Build Tools 2015 fehl, daher muss --msvs_version=2015
hinzugefügt werden (nicht erforderlich, wenn es von npm wie oben konfiguriert ausgeführt wird):
node-gyp configure --msvs_version=2015
Hinweis: Der Schritt configure
sucht im aktuellen Verzeichnis nach einer binding.gyp
-Datei, die verarbeitet werden soll. Anweisungen zum Erstellen einer binding.gyp
-Datei finden Sie weiter unten.
Jetzt haben Sie entweder eine Makefile
(auf Unix-Plattformen) oder eine vcxproj
-Datei (unter Windows) im Verzeichnis build/
. Als nächstes rufen Sie den Befehl build
auf:
node-gyp build
Jetzt haben Sie Ihre kompilierte .node
Bindungsdatei! Die kompilierten Bindings enden in build/Debug/
oder build/Release/
, je nach Build-Modus. An diesem Punkt können Sie die .node
Datei mit Node.js benötigen und Ihre Tests ausführen!
Hinweis: Um einen Debug-Build der Bindings-Datei zu erstellen, übergeben Sie den --debug
(oder-d
) Schalter, wenn Sie entweder die configure
, build
oder rebuild
Befehle ausführen.
Die binding.gyp Datei
Eine binding.gyp
Datei beschreibt die Konfiguration, um Ihr Modul zu bauen, in einem JSON-ähnlichen Format. Diese Datei wird im Wurzelverzeichnis deines Pakets platziert, nebenpackage.json
.
Eine einfache gyp
Datei, die für die Erstellung eines Node.js Addons geeignet ist, könnte wie folgt aussehen:
{ "targets": } ]}
Weitere Lektüre
Einige zusätzliche Ressourcen für Node.js Native Addons und das Schreiben von gyp
Konfigurationsdateien:
- „Going Native“ ein nodeschool.io Tutorial
- „Hello World“ Node Addon Beispiel
- gyp Benutzerdokumentation
- gyp Eingabeformat Referenz
- „binding.gyp“ Dateien in freier Wildbahn Wiki Seite
Befehle
node-gyp
reagiert auf die folgenden Befehle:
Befehl | Beschreibung |
---|---|
help |
Zeigt den Hilfe-Dialog |
build |
Ruft make /msbuild.exe auf und baut das native Addon |
clean |
Entfernt das Verzeichnis build , falls es existiert |
configure |
Erzeugt Projekt-Build-Dateien für die aktuelle Plattform |
rebuild |
Läuft clean , configure und build alle hintereinander |
install |
Installiert Node.js-Header-Dateien für die angegebene Version |
list |
Listet die aktuell installierten Node.js-Header-Versionen auf |
remove |
Entfernt die Node.js-Header-Dateien für die angegebene Version |
Befehlsoptionen
node-gyp
akzeptiert die folgenden Befehlsoptionen:
Befehl | Beschreibung |
---|---|
-j n , --jobs n |
Parallel ausführen make . Der Wert max wird alle verfügbaren CPU-Kerne nutzen |
--target=v6.2.1 |
Node.js Version zu bauen (Standard ist process.version ) |
--silly , --loglevel=silly |
Protokolliere alle Fortschritte auf der Konsole |
--verbose , --loglevel=verbose |
Den meisten Fortschritt auf der Konsole protokollieren |
--silent , --loglevel=silent |
Nichts auf der Konsole protokollieren |
debug , --debug |
Debug-Build erstellen (Standard ist Release ) |
--release , --no-debug |
Release-Build erstellen |
-C $dir , --directory=$dir |
Befehl in anderem Verzeichnis ausführen |
--make=$make |
Befehl make außer Kraft setzen (z.z. B. gmake ) |
--thin=yes |
Thin statische Bibliotheken aktivieren |
--arch=$arch |
Zielarchitektur einstellen (z. B. ia32) |
--tarball=$path |
Header aus einem lokalen Tarball holen |
--devdir=$path |
SDK-Download-Verzeichnis (Standard ist das OS-Cache-Verzeichnis) |
--ensure |
Kopfzeilen nicht neu installieren, wenn bereits vorhanden |
--dist-url=$url |
Herunterladen des Header-Tarballs von einer benutzerdefinierten URL |
--proxy=$url |
HTTP(S)-Proxy für das Herunterladen des Header-Tarballs einstellen |
--noproxy=$urls |
URLs so einstellen, dass Proxys beim Herunterladen des Header-Tarballs ignoriert werden |
--cafile=$cafile |
Standard-CA-Kette überschreiben Standard-CA-Kette (zum Herunterladen des Tarballs) |
--nodedir=$path |
Pfad zum Node-Quellcode einstellen |
--python=$path |
Pfad zum Python-Binary einstellen |
--msvs_version=$version |
Visual-Studio-Version einstellen (nur Windows) |
--solution=$solution |
Visual Studio Solution Version einstellen (nur Windows) |
Konfiguration
Umgebungsvariablen
Verwenden Sie die Form npm_config_OPTION_NAME
für die oben aufgeführten Befehlsoptionen (Bindestriche in Optionsnamen sollten durch Unterstriche ersetzt werden).
Um zum Beispiel devdir
gleich /tmp/.gyp
zu setzen, würden Sie:
Ausführen unter Unix:
export npm_config_devdir=/tmp/.gyp
Oder dies unter Windows:
set npm_config_devdir=c:\temp\.gyp
npm configuration
Verwenden Sie die Form OPTION_NAME
für jede der oben aufgeführten Befehlsoptionen.
Um zum Beispiel devdir
gleich /tmp/.gyp
zu setzen, würde man ausführen:
npm config set devdir /tmp/.gyp
Hinweis: Die über npm
gesetzte Konfiguration wird nur verwendet, wenn node-gyp
über npm
ausgeführt wird, nicht wenn node-gyp
direkt ausgeführt wird.
Lizenz
node-gyp
ist unter der MIT-Lizenz verfügbar. Siehe die LICENSE-Datei für Details.
Leave a Reply