nodejs / node-gyp

Build Status

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 von xcode-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 werden clang, clang++ und make installiert.

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:

  1. durch Setzen der --python-Kommandozeilenoption, z.B.
node-gyp <command> --python /path/to/executable/python
  1. Wenn node-gyp über npm aufgerufen wird und Sie mehrere Python-Versionen installiert haben, können Sie den ‚python‘-Konfigurationsschlüssel von npm auf den entsprechenden Wert setzen:
npm config set python /path/to/executable/python
  1. 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.

  2. 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=2015hinzugefü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