nodejs / node-gyp
node-gyp is een cross-platform command-line tool geschreven in Node.js voor het compileren van native addon modules voor Node.js. Het bevat een vendored kopie van hetgyp-next project dat voorheen door het Chromium team werd gebruikt, uitgebreid om de ontwikkeling van Node.js native addons te ondersteunen.
Merk op dat node-gyp niet wordt gebruikt om Node.js zelf te bouwen.
Meerdere doelversies van Node.js worden ondersteund (d.w.z. 0.8, …, 4, 5, 6, enz.), ongeacht welke versie van Node.js daadwerkelijk op uw systeem is geïnstalleerd(node-gyp downloadt de noodzakelijke ontwikkelingsbestanden of headers voor de doelversie).
Eigenschappen
- Dezelfde build-opdrachten werken op elk van de ondersteunde platforms
- Ondersteunt de targeting van verschillende versies van Node.js
Installatie
U kunt node-gyp installeren met npm:
npm install -g node-gyp
Afhankelijk van uw besturingssysteem, dient u te installeren:
Op Unix
- Python v3.6, v3.7, v3.8, of v3.9
make- Een goede C/C++ compiler toolchain, zoals GCC
Op macOS
ATTENTIE: Als uw Mac is geüpgraded naar macOS Catalina (10.15), lees dan macOS_Catalina.md.
- Python v3.6, v3.7, v3.8, of v3.9
- Xcode
- U moet ook de
XCode Command Line Toolsinstalleren doorxcode-select --installuit te voeren. Als u al de volledige Xcode hebt geïnstalleerd, kunt u deze ook vinden onder het menuXcode -> Open Developer Tool -> More Developer Tools.... Deze stap installeertclang,clang++, enmake.
- U moet ook de
Onder Windows
Installeer de huidige versie van Python uit het Microsoft Store pakket.
Installeer gereedschappen en configuratie handmatig:
- Installeer Visual C++ Build Environment: Visual Studio Build Tools(met behulp van “Visual C++ build tools” werklast) of Visual Studio 2017 Community(met behulp van de “Desktop development with C++” werklast)
- Lanceer cmd,
npm config set msvs_version 2017
Als de bovenstaande stappen niet voor u werkten, bezoek dan Microsoft’s Node.js Guidelines for Windows voor aanvullende tips.
Om native ARM64 Node.js op Windows 10 op ARM te targeten, voegt u de componenten “Visual C++ compilers and libraries for ARM64” en “Visual C++ ATL for ARM64” toe.
Python-afhankelijkheid configureren
node-gypVoorwaarde is dat u een compatibele versie van Python hebt geïnstalleerd, een van: v3.6, v3.7,v3.8, of v3.9. Indien u meerdere Python-versies hebt geïnstalleerd, kunt u op een van de volgende manieren aangeven welke Python-versie node-gyp moet gebruiken:
- door de
--pythoncommand-line optie in te stellen, bijv.:
node-gyp <command> --python /path/to/executable/python
- Als
node-gypwordt aangeroepen vianpm, en u hebt meerdere versies van Python geïnstalleerd, dan kunt u de ‘python’-configuratiesleutel vannpmop de juiste waarde instellen:
npm config set python /path/to/executable/python
-
Als de omgevingsvariabele
PYTHONis ingesteld op het pad van een uitvoerbare Python-versie, dan zal die versie worden gebruikt, als het een compatibele versie is. -
Als de omgevingsvariabele
NODE_GYP_FORCE_PYTHONis ingesteld op het pad van een Python-uitvoerbaar bestand, wordt dit gebruikt in plaats van een van de andere geconfigureerde of ingebouwde Python-zoekpaden. Als het geen compatibele versie is, wordt er niet verder gezocht.
Hoe te gebruiken
Om uw native addon te compileren, gaat u eerst naar de hoofddirectory:
cd my_node_addon
De volgende stap is het genereren van de juiste project build bestanden voor het huidige platform. Gebruik daarvoor configure:
node-gyp configure
Autodetectie mislukt voor Visual C++ Build Tools 2015, dus --msvs_version=2015 moet worden toegevoegd (niet nodig wanneer uitgevoerd door npm zoals hierboven geconfigureerd):
node-gyp configure --msvs_version=2015
Note: De configure stap zoekt naar een binding.gyp bestand in de huidige directory om te verwerken. Zie hieronder voor instructies over het maken van een binding.gyp bestand.
Nu heeft u ofwel een Makefile (op Unix platforms) of een vcxproj bestand (op Windows) in de build/ directory. Roep vervolgens het build commando op:
node-gyp build
Nu hebt u uw gecompileerde .node bindingsbestand! De gecompileerde bindingen eindigen in build/Debug/ of build/Release/, afhankelijk van de build mode. Op dit punt kunt u het .node bestand met Node.js vereisen en uw tests uitvoeren!
Note: Om een Debug build van het bindingsbestand te maken, geeft u de --debug (of-d) switch door wanneer u de configure, build of rebuild commando’s uitvoert.
Het binding.gyp bestand
Een binding.gyp bestand beschrijft de configuratie om uw module te bouwen, in een JSON-achtig formaat. Dit bestand wordt in de root van uw pakket geplaatst, naastpackage.json.
Een kaal gyp bestand dat geschikt is voor het bouwen van een Node.js addon zou er zo uit kunnen zien:
{ "targets": } ]}
Verder lezen
Een aantal aanvullende bronnen voor Node.js native addons en het schrijven van gyp configuratiebestanden:
- “Going Native” een nodeschool.io tutorial
- “Hello World” node addon voorbeeld
- gyp gebruikersdocumentatie
- gyp invoerformaat referentie
- “binding.gyp” files out in the wild wiki page
Commando’s
node-gyp reageert op de volgende commando’s:
| Command | Description |
|---|---|
help |
Toont het help-dialoogvenster |
build |
Oproept make/msbuild.exe en bouwt de native addon |
clean |
Verwijdert de build directory indien deze bestaat |
configure |
Genereert project build files voor het huidige platform |
rebuild |
Draait clean, configure en build allemaal achter elkaar |
install |
Installeert Node.js header-bestanden voor de opgegeven versie |
list |
Lijst met de momenteel geïnstalleerde Node.js header-versies |
remove |
Verwijdert de Node.js header-bestanden voor de opgegeven versie |
Command Options
node-gyp accepteert de volgende commando-opties:
| Command | Description |
|---|---|
-j n, --jobs n |
Run make in parallel. De waarde max zal alle beschikbare CPU cores gebruiken |
--target=v6.2.1 |
Node.js versie om voor te bouwen (standaard is process.version) |
--silly, --loglevel=silly |
Log alle voortgang naar console |
--verbose, --loglevel=verbose |
Log meeste vooruitgang naar console |
--silent, --loglevel=silent |
Log niets naar console |
debug, --debug |
Make Debug build (standaard is Release) |
--release, --no-debug |
Make Release build |
-C $dir, --directory=$dir |
Commando uitvoeren in andere directory |
--make=$make |
Override make commando (bijv.b.v. gmake) |
--thin=yes |
Dunne statische bibliotheken inschakelen |
--arch=$arch |
Doelarchitectuur instellen (b.v. ia32) |
--tarball=$path |
Haal headers op van een lokale tarball |
--devdir=$path |
SDK download directory (standaard is de OS cache directory) |
--ensure |
Installeer headers niet opnieuw indien reeds aanwezig |
--dist-url=$url |
Download header tarball van aangepaste URL |
--proxy=$url |
Stel HTTP(S) proxy in voor het downloaden van header tarball |
--noproxy=$urls |
Stel url’s in om proxies te negeren bij het downloaden van header tarball |
--cafile=$cafile |
Override standaard CA-keten (om tarball te downloaden) |
--nodedir=$path |
Stel het pad in naar de broncode van het knooppunt |
--python=$path |
Stel het pad in naar de Python binary |
--msvs_version=$version |
Stel de Visual Studio versie in (alleen Windows) |
--solution=$solution |
Versie Visual Studio-oplossing instellen (alleen Windows) |
Configuratie
Omgevingsvariabelen
Gebruik de vorm npm_config_OPTION_NAME voor elk van de bovenstaande opdrachtopties (streepjes in optienamen moeten worden vervangen door underscores).
Om bijvoorbeeld devdir gelijk te stellen aan /tmp/.gyp, zou u:
Dit uitvoeren op Unix:
export npm_config_devdir=/tmp/.gyp
Of dit op Windows:
set npm_config_devdir=c:\temp\.gyp
npm configuration
Gebruik de vorm OPTION_NAME voor een van de bovenstaande commando-opties.
Om bijvoorbeeld devdir gelijk te stellen aan /tmp/.gyp, zou u het volgende uitvoeren:
npm config set devdir /tmp/.gyp
Note: Configuratie ingesteld via npm zal alleen worden gebruikt wanneer node-gyp wordt uitgevoerd via npm, niet wanneer node-gyp direct wordt uitgevoerd.
Licentie
node-gyp is beschikbaar onder de MIT-licentie. Zie het LICENSE-bestand voor details.
Leave a Reply