Skip to content

Archives

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Geen categorieën
Trend RepositoryArticles and guides
Articles

scripts

On december 17, 2021 by admin
Inhoudsopgave
  • Beschrijving
  • Pre & Post Scripts
  • Life Cycle Scripts
  • Prepare and Prepublish
  • Volgorde van de levenscyclus
  • npm publish
  • npm pack
  • npm install
  • npm start
  • Default Values
  • User
  • Omgeving
  • pad
  • package.json vars
  • configuratie
  • Speciaal: package.json "config" object
  • current lifecycle event
  • Voorbeelden
  • Afsluiten
  • Hook Scripts
  • Best Practices
  • Zie ook

Beschrijving

De "scripts" eigenschap van uw package.json bestand ondersteunt een aantal ingebouwde scripts en hun voorgeprogrammeerde life cycle events, alsmede willekeurige scripts. Deze kunnen allemaal worden uitgevoerd door npm run-script <stage> of kortweg npm run <stage> uit te voeren. Pre- en postcommando’s met overeenkomende namen worden ook voor deze uitgevoerd (bijv. premyscript, myscript, postmyscript). Scripts van afhankelijkheden kunnen worden uitgevoerd met npm explore <pkg> -- npm run <stage>.

Pre & Post Scripts

Om “pre” of “post” scripts te maken voor alle scripts die zijn gedefinieerd in de "scripts" sectie van de package.json, maakt u eenvoudig een ander script met een overeenkomstige naam en voegt u “pre” of “post” toe aan het begin ervan.

{
"scripts": {
"precompress": "{{ voert uit VOOR het `compress` script }}",
"compress": "{{ opdracht uitvoeren om bestanden te comprimeren }}",
"postcompress": "{{ wordt uitgevoerd NA het `compress` script }}".
}
}

Life Cycle Scripts

Er zijn enkele speciale life cycle scripts die alleen in bepaalde situaties voorkomen. Deze scripts komen naast het “pre” en “post” script.

  • prepare, prepublish, prepublishOnly, prepack, postpack

prepare (sinds [email protected])

  • Draait VOORDAT het pakket wordt ingepakt
  • Draait VOORDAT het pakket wordt gepubliceerd
  • Draait op lokaal npm install zonder argumenten
  • Draait NA prepublish, maar VOOR prepublishOnly
  • NOTE: Als een pakket dat via git wordt geïnstalleerd een prepare script bevat, zullen zijn dependencies en devDependencies worden geïnstalleerd, en zal het prepare script worden uitgevoerd, voordat het pakket wordt ingepakt en geïnstalleerd.

prepublish (DEPRECATED)

  • Zoals prepare

prepublishOnly

  • Wordt uitgevoerd VOORDAT het pakket is voorbereid en ingepakt, ALLEEN op npm publish.

prepack

  • Wordt uitgevoerd VOORDAT een tarball is ingepakt (op “npm pack“, “npm publish“, en wanneer een git-dependencies wordt geïnstalleerd).
  • NOOT: “npm run pack” is NIET hetzelfde als “npm pack“. “npm run pack” is een willekeurige door de gebruiker gedefinieerde scriptnaam, terwijl “npm pack” een door de CLI gedefinieerde opdracht is.

postpack

  • Wordt uitgevoerd NADAT de tarball is gegenereerd en naar de uiteindelijke bestemming is verplaatst.

Prepare and Prepublish

Deprecatie Opmerking: prepublish

Sinds [email protected] voert de npm CLI het prepublish-script uit voor zowel npm publish als npm install, omdat het een handige manier is om een pakket voor gebruik voor te bereiden (enkele veelvoorkomende gebruikssituaties worden beschreven in de sectie hieronder). Het blijkt in de praktijk ook erg verwarrend te zijn. Met ingang van [email protected] is een nieuwe event geïntroduceerd, prepare, die dit bestaande gedrag behoudt. Een nieuwe gebeurtenis, prepublishOnly is toegevoegd als een overgangsstrategie om gebruikers in staat te stellen het verwarrende gedrag van bestaande npm versies te vermijden en alleen op npm publish te draaien (bijvoorbeeld de tests nog een laatste keer draaien om er zeker van te zijn dat ze in goede staat zijn).

Zie https://github.com/npm/npm/issues/10074 voor een veel langere rechtvaardiging, met verdere lectuur, voor deze verandering.

Gebruiksgevallen

Als u bewerkingen op uw pakket moet uitvoeren voordat het wordt gebruikt, op een manier die niet afhankelijk is van het besturingssysteem of de architectuur van het doelsysteem, gebruik dan een prepublish-script. Dit omvat taken zoals:

  • Compileren van CoffeeScript-broncode in JavaScript.
  • Maken van geminificeerde versies van JavaScript-broncode.
  • Opvragen van externe bronnen die uw pakket zal gebruiken.

Het voordeel van het doen van deze dingen op prepublish-tijd is dat ze eenmalig kunnen worden gedaan, op een enkele plaats, waardoor de complexiteit en variabiliteit worden verminderd. Bovendien betekent dit dat:

  • U kunt afhankelijk zijn van coffee-script als een devDependency, en dus hoeven uw gebruikers het niet geïnstalleerd te hebben.
  • U hoeft geen minifiers in uw pakket op te nemen, waardoor de omvang voor uw gebruikers kleiner wordt.
  • U hoeft er niet op te vertrouwen dat uw gebruikers curl of wget of andere systeemtools op de doelmachines hebben.

Volgorde van de levenscyclus

npm publish

  • prepublishOnly
  • prepare
  • prepublish
  • publish
  • postpublish

npm pack

  • prepack
  • postpack

npm install

  • preinstall
  • install
  • postinstall

Ook triggers

  • prepublish (wanneer op lokaal)
  • prepare (wanneer op lokaal)

npm start

npm run start heeft een npm start shorthand.

  • prestart
  • start
  • poststart

Default Values

npm zal sommige scriptwaarden standaard instellen op basis van de inhoud van het pakket.

  • "start": "node server.js":

    Als er een server.js-bestand in de root van uw pakket staat, dan zal npm het start-commando standaard op node server.js zetten.

  • "install": "node-gyp rebuild":

    Als er een binding.gyp bestand in de root van uw pakket staat en u heeft geen eigen install of preinstall scripts gedefinieerd, dan zal npm de install opdracht standaard op node-gyp zetten.

User

Als npm werd aangeroepen met root-privileges, dan zal het de uid veranderen in de gebruikersaccount of uid gespecificeerd door de user config, die standaard nobody is. Zet de unsafe-perm vlag om scripts met root rechten uit te voeren.

Omgeving

Package scripts draaien in een omgeving waar veel informatie beschikbaar wordt gemaakt over de setup van npm en de huidige status van het proces.

pad

Als u afhankelijk bent van modules die uitvoerbare scripts definiëren, zoals testsuites, dan zullen die uitvoerbare bestanden worden toegevoegd aan de PATH voor het uitvoeren van de scripts. Dus, als uw package.json het volgende bevat:

{
"name" : "foo",
"dependencies" : {
"bar" : "0.1.x"
},
"scripts": {3740>
"start" : "bar ./test"
} },
"scripts" : "0.1.x"
}
}

dan zou u npm start kunnen uitvoeren om het bar script uit te voeren, dat wordt geëxporteerd in de node_modules/.bin directory op npm install.

package.json vars

De package.json velden worden geplakt op de npm_package_ prefix. Dus, bijvoorbeeld, als u {"name":"foo", "version":"1.2.5"} in uwpackage.json bestand had, dan zouden uw package scripts denpm_package_name omgevingsvariabele ingesteld hebben op "foo", en denpm_package_version ingesteld op "1.2.5". U kunt deze variabelen in uw code benaderen met process.env.npm_package_name enprocess.env.npm_package_version, en zo verder voor andere velden.

configuratie

Configuratie parameters worden in de omgeving gezet met hetnpm_config_ voorvoegsel. U kunt bijvoorbeeld de effectieve rootconfig bekijken door de npm_config_root omgevingsvariabele te controleren.

Speciaal: package.json "config" object

De package.json "config" sleutels worden overschreven in de omgeving als er een config param van <name>:<key> is. Als de package.json bijvoorbeeld het volgende heeft:

{
"name" : "foo",
"config" : {
"port" : "8080"
},
"scripts" : {
"start" : "node server.js"
} },
"scripts" : {
"start" : "node server.js
}

en de server.js is dit:

http.createServer(...).listen(process.env.npm_package_config_port)

dan zou de gebruiker het gedrag kunnen veranderen door te doen:

npm config set foo:port 80

current lifecycle event

Ten slotte wordt de omgevingsvariabele npm_lifecycle_event ingesteld op de fase van de cyclus die wordt uitgevoerd. U zou dus een enkel script kunnen hebben dat gebruikt wordt voor verschillende delen van het proces, dat schakelt op basis van wat er op dat moment gebeurt.

Objecten worden afgevlakt volgens dit formaat, dus als u{"scripts":{"install":"foo.js"}} in uw package.json had staan, dan zou je dit in het script zien:

process.env.npm_package_scripts_install === "foo.js"

Voorbeelden

Als je package.json bijvoorbeeld dit bevat:

{
"scripts" : {
"install" : "scripts/install.js",
"postinstall" : "scripts/install.js",
"uninstall" : "scripts/uninstall.js"
}
}

dan wordt scripts/install.js aangeroepen voor de installatie- en post-installatiefasen van de levenscyclus, en scripts/uninstall.jswordt aangeroepen wanneer het pakket wordt verwijderd. Aangezienscripts/install.js voor twee verschillende fasen wordt aangeroepen, zou het in dit geval verstandig zijn om naar de omgevingsvariabele npm_lifecycle_event te kijken.

Als u een make commando wilt uitvoeren, kunt u dat doen. Dit werkt prima:

{
"scripts" : {
"preinstall" : "./configure",
"install" : "make && make install",
"test" : "make test"
}
}

Afsluiten

Scripts worden uitgevoerd door de regel als scriptargument door te geven aan sh.

Als het script afsluit met een andere code dan 0, wordt het proces afgebroken.

Merk op dat deze scriptbestanden geen nodejs of zelfs geen javascript-programma's hoeven te zijn. Ze hoeven alleen maar een soort uitvoerbaar bestand te zijn.

Hook Scripts

Als u een specifiek script wilt uitvoeren op een specifieke lifecycle event voor ALLE pakketten, dan kunt u een hook script gebruiken.

Plaats een uitvoerbaar bestand op node_modules/.hooks/{eventname}, en het zal worden uitgevoerd voor alle pakketten wanneer ze door dat punt in de package lifecycle gaan voor alle pakketten die in die root zijn geïnstalleerd.

Hook scripts worden op precies dezelfde manier uitgevoerd als package.json scripts. Dat wil zeggen, ze zitten in een apart child proces, met de hierboven beschreven env.

Best Practices

  • Ga niet weg met een foutcode van nul tenzij je het echt meent. Behalve voor uninstall scripts, zal dit de npm actie doen mislukken, en mogelijk worden teruggedraaid. Als de fout klein is of alleen enkele optionele functies zal voorkomen, dan is het beter om gewoon een waarschuwing af te drukken en succesvol af te sluiten.
  • Probeer geen scripts te gebruiken om te doen wat npm voor jou kan doen. Leespackage.json door om te zien wat je allemaal kunt opgeven en inschakelen door je pakket gewoon goed te beschrijven. In het algemeen zal dit leiden tot een meer robuuste en consistente staat.
  • Inspecteer de env om te bepalen waar je dingen moet zetten. Bijvoorbeeld, als de npm_config_binroot omgevingsvariabele is ingesteld op /home/user/bin, probeer dan niet om uitvoerbare bestanden te installeren in /usr/local/bin. De gebruiker heeft dit waarschijnlijk niet voor niets zo ingesteld.
  • Geef geen voorvoegsel voor uw script commando’s met “sudo”. Als root permissies nodig zijn om een of andere reden, dan zal het mislukken met die fout, en de gebruiker zal sudo het npm commando in kwestie.
  • Gebruik geen install. Gebruik een .gyp bestand voor compilatie, en prepublish voor al het andere. U zou bijna nooit een installatie- of installatie-script expliciet moeten hoeven in te stellen. Als u dit toch doet, overweeg dan of er een andere optie is. Het enige geldige gebruik van install of preinstallscripts is voor compilatie, wat moet gebeuren op de doelarchitectuur.

Zie ook

  • npm run-script
  • package.json
  • npm developers
  • npm install

Geef een antwoord Antwoord annuleren

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Archieven

  • januari 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Meta

  • Inloggen
  • Berichten feed
  • Reacties feed
  • WordPress.org
  • DeutschDeutsch
  • NederlandsNederlands
  • SvenskaSvenska
  • DanskDansk
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • RomânăRomână
  • PolskiPolski
  • ČeštinaČeština
  • MagyarMagyar
  • SuomiSuomi
  • 日本語日本語

Copyright Trend Repository 2022 | Theme by ThemeinProgress | Proudly powered by WordPress