Hoppa till innehåll

Archives

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

Categories

  • Inga kategorier
Trend RepositoryArticles and guides
Articles

scripts

On december 17, 2021 by admin
Innehållsförteckning
  • Beskrivning
  • Pre & Post Scripts
  • Livscykelskripter
  • Förbered och förpublicera
  • Livscykel Driftsordning
  • npm publish
  • npm pack
  • npm install
  • npm start
  • Standardvärden
  • Användare
  • Environment
  • path
  • package.json vars
  • configuration
  • Special: package.json ”config” object
  • aktuell livscykelhändelse
  • Exempel
  • Exiting
  • Hook Scripts
  • Best Practices
  • Se även

Beskrivning

Genom egenskapen "scripts" i din package.json-fil finns stöd för ett antal inbyggda skript och deras förinställda livscykelhändelser samt godtyckliga skript. Dessa kan alla exekveras genom att köra npm run-script <stage> eller npm run <stage> förkortat. För- och efterkommandon med matchande namn kommer också att köras för dessa (t.ex. premyscript, myscript, postmyscript). Skript från beroenden kan köras med npm explore <pkg> -- npm run <stage>.

Pre & Post Scripts

För att skapa ”pre”- eller ”post”-skript för alla skript som definieras i "scripts"-avsnittet i package.json, skapar du helt enkelt ett annat skript med ett matchande namn och lägger till ”pre” eller ”post” i början av dem.

{
"scripts": {
"precompress": {
"precompress": {
"precompress": "{{ exekveras INNAN skriptet `compress` }}",
"compress":
"compress":
"compress":
"postcompress": "{{ kör kommandot för att komprimera filer }}",
"postcompress": "{{ kör kommandot för att komprimera filer }}": "{{ körs EFTER skriptet `compress` }}"
}
}

Livscykelskripter

Det finns några speciella livscykelskripter som endast sker i vissa situationer. Dessa skript sker utöver ”pre”- och ”post”-skripten.

  • prepare, prepublish, prepublishOnly, prepack, postpack

prepare (since [email protected])

  • Kör innan paketet packas
  • Kör innan paketet publiceras
  • Kör på lokal npm install utan några argument
  • Kör efter prepublish, men före prepublishOnly
  • Notera: Om ett paket som installeras via git innehåller ett skript prepare kommer dess dependencies och devDependencies att installeras och skriptet prepare att köras innan paketet paketeras och installeras.

prepublish (DEPRECATED)

  • Samma som prepare

prepublishOnly

  • Körs INNAN paketet förbereds och paketeras, ENDAST på npm publish.

prepack

  • Körs INNAN en tarball packas (på ”npm pack”, ”npm publish” och vid installation av git-beroenden).
  • OBS: ”npm run pack” är INTE detsamma som ”npm pack”. ”npm run pack” är ett godtyckligt användardefinierat skriptnamn, medan ”npm pack” är ett CLI-definierat kommando.

postpack

  • Körs EFTER att tarbollen har genererats och flyttats till sin slutliga destination.

Förbered och förpublicera

Deprecisering Anmärkning: prepublish

Sedan [email protected] har npm CLI kört prepublish-skriptet för både npm publish och npm install, eftersom det är ett bekvämt sätt att förbereda ett paket för användning (några vanliga användningsfall beskrivs i avsnittet nedan). Det har också visat sig vara, i praktiken, mycket förvirrande. Från och med [email protected] har en ny händelse införts, prepare, som bevarar detta befintliga beteende. En ny händelse, prepublishOnly, har lagts till som en övergångsstrategi för att användare ska kunna undvika det förvirrande beteendet i befintliga npm-versioner och endast köra på npm publish (t.ex. köra testerna en sista gång för att se till att de är i gott skick).

Se https://github.com/npm/npm/issues/10074 för en mycket längre motivering, med ytterligare läsning, för den här ändringen.

Användningsfall

Om du behöver utföra åtgärder på ditt paket innan det används, på ett sätt som inte är beroende av målsystemets operativsystem eller arkitektur, använd ett prepublish-skript. Detta inkluderar uppgifter som:

  • Kompilering av CoffeeScript-källkod till JavaScript.
  • Skapande av minifierade versioner av JavaScript-källkod.
  • Hämtning av fjärrresurser som paketet kommer att använda.

Fördelen med att göra dessa saker vid prepublish-tillfället är att de kan göras en gång, på ett enda ställe, och på så sätt minska komplexiteten och variabiliteten. Dessutom innebär detta att:

  • Du kan vara beroende av coffee-script som en devDependency, och därmed behöver dina användare inte ha den installerad.
  • Du behöver inte inkludera minifiers i ditt paket, vilket minskar storleken för dina användare.
  • Du behöver inte förlita dig på att dina användare har curl eller wget eller andra systemverktyg på målmaskinerna.

Livscykel Driftsordning

npm publish

  • prepublishOnly
  • prepare
  • prepublish
  • publish
  • postpublish

npm pack

  • prepack
  • postpack

npm install

  • preinstall
  • install
  • postinstall

Also triggers

  • prepublish (när på lokal)
  • prepare (när på lokal)

npm start

npm run start har en npm start förkortning.

  • prestart
  • start
  • poststart

Standardvärden

npm kommer att standardisera vissa skriptvärden baserat på paketets innehåll.

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

    Om det finns en server.js-fil i paketets rot kommer npm att förinställa start-kommandot till node server.js.

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

    Om det finns en binding.gyp-fil i roten av ditt paket och du inte har definierat egna install– eller preinstall-skript, kommer npm att förinställa install-kommandot till att kompilera med node-gyp.

Användare

Om npm har anropats med root-privilegier kommer den att ändra uid till det användarkonto eller uid som anges i user config, vilket är nobody som standard. Sätt flaggan unsafe-perm för att köra skript med root-privilegier.

Environment

Paketskript körs i en miljö där många delar av informationen görs tillgänglig om inställningen av npm och processens aktuella tillstånd.

path

Om du är beroende av moduler som definierar exekverbara skript, som t.ex. testsuites, kommer dessa exekverbara skript att läggas till PATH för att utföra skript. Så om din package.json har följande:

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

då kan du köra npm start för att exekvera skriptet bar, som exporteras till katalogen node_modules/.bin på npm install.

package.json vars

Fälten i package.json häftas på prefixet npm_package_. Så om du till exempel hade {"name":"foo", "version":"1.2.5"} i filenpackage.json skulle dina paketskript ha miljövariabeln npm_package_name inställd på ”foo” och npm_package_version inställd på ”1.2.5”. Du kan komma åt dessa variabler i din kod med process.env.npm_package_name ochprocess.env.npm_package_version, och så vidare för andra fält.

configuration

Konfigurationsparametrar sätts in i miljön med prefixetnpm_config_. Du kan till exempel se den effektiva rootconfig genom att kontrollera miljövariabeln npm_config_root.

Special: package.json ”config” object

Nycklarna i package.json ”config” skrivs över i miljön om det finns en config-parameter av <name>:<key>. Om package.json till exempel har följande:

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

och server.js är detta:

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

då kan användaren ändra beteendet genom att göra:

npm config set foo:port 80

aktuell livscykelhändelse

Slutligt sätts miljövariabeln npm_lifecycle_event till vilket stadium av cykeln som helst. Så du kan ha ett enda skript som används för olika delar av processen och som växlar beroende på vad som händer för tillfället.

Objekten plattas till enligt detta format, så om du hade{"scripts":{"install":"foo.js"}} i ditt paket.json, skulle du se detta i skriptet:

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

Exempel

Om din package.json till exempel innehåller detta:

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

då kommer scripts/install.js att anropas för livscykelns installations- och efterinstallationsstadier, och scripts/uninstall.js kommer att anropas när paketet avinstalleras. Eftersomscripts/install.js körs för två olika faser skulle det i det här fallet vara klokt att titta på miljövariabeln npm_lifecycle_event.

Om du vill köra ett make-kommando kan du göra det. Detta fungerar utmärkt:

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

Exiting

Skripten körs genom att skicka raden som ett skriptargument till sh.

Om skriptet avslutas med en annan kod än 0 kommer detta att avbrytaprocessen.

Bemärk att dessa skriptfiler inte behöver vara nodejs- eller ensjavascript-program. De måste bara vara någon form av körbar fil.

Hook Scripts

Om du vill köra ett specifikt skript vid en specifik livscykelhändelse för ALLA paket kan du använda ett hook script.

Placera en körbar fil vid node_modules/.hooks/{eventname}, och den kommer att köras för alla paket när de passerar genom den punkten i paketlivscykeln för alla paket som är installerade i den roten.

Hook-skript körs på exakt samma sätt som package.json-skript, det vill säga i en separat underprocess, med den env som beskrivs ovan.

Best Practices

  • Avsluta inte med en felkod som inte är noll om du inte verkligen menar det.Med undantag för avinstallationsskript kommer detta att leda till att npm-åtgärden misslyckas, och eventuellt rullas tillbaka. Om felet är mindre eller endast förhindrar några valfria funktioner är det bättre att bara skriva ut en varning och avsluta framgångsrikt.
  • Försök att inte använda skript för att göra det som npm kan göra åt dig. Läs igenompackage.json för att se alla saker som du kan specificera och aktivera genom att helt enkelt beskriva ditt paket på lämpligt sätt. I allmänhet kommer detta att leda till ett mer robust och konsekvent tillstånd.
  • Inspektera env för att avgöra var du ska lägga saker. Om till exempel miljövariabeln npm_config_binroot är inställd på /home/user/bin, försök inte installera körbara filer i /usr/local/bin. Användaren har förmodligen ställt in den så av en anledning.
  • Förbered inte dina skriptkommandon med ”sudo”. Om root-behörigheter krävs av någon anledning kommer det att misslyckas med det felet, och användaren kommer att sudo npm-kommandot i fråga.
  • Använd inte install. Använd en .gyp-fil för kompilering och prepublish för allt annat. Du bör nästan aldrig behöva ställa in enpreinstall eller ett installationsskript explicit. Om du gör detta bör du överväga om det finns ett annat alternativ. Den enda giltiga användningen av install eller preinstallskript är för kompilering som måste göras på målarkitekturen.

Se även

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

Lämna ett svar Avbryt svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Arkiv

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

Meta

  • Logga in
  • Flöde för inlägg
  • Flöde för kommentarer
  • 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
  • 日本語日本語

Upphovsrätt Trend Repository 2022 | Tema av ThemeinProgress | Drivs med WordPress