Skip to content

Archives

  • januar 2022
  • december 2021
  • november 2021
  • oktober 2021
  • september 2021

Categories

  • Ingen kategorier
Trend RepositoryArticles and guides
Articles

scripts

On december 17, 2021 by admin
Indholdsfortegnelse
  • Beskrivelse
  • Pre & Post Scripts
  • Livscyklus-scripts
  • Forbered og prepublish
  • Livscyklus Driftsorden
  • npm publish
  • npm pack
  • npm install
  • npm start
  • Standardværdier
  • User
  • Environment
  • path
  • package.json vars
  • konfiguration
  • Special: package.json “config”-objekt
  • current lifecycle event
  • Eksempler
  • Afslutter
  • Hook-scripts
  • Bedste praksis
  • Se også

Beskrivelse

Den "scripts" egenskab i din package.json fil understøtter en række indbyggede scripts og deres forudindstillede livscyklusbegivenheder samt vilkårlige scripts. Disse kan alle udføres ved at køre npm run-script <stage> eller npm run <stage> forkortet npm run <stage>. For- og efterkommandoer med matchende navne vil også blive kørt for disse (f.eks. premyscript, myscript, postmyscript). Skripter fra afhængigheder kan køres med npm explore <pkg> -- npm run <stage>.

Pre & Post Scripts

For at oprette “pre” eller “post” scripts for alle scripts defineret i "scripts" afsnittet i package.json skal du blot oprette et andet script med et matchende navn og tilføje “pre” eller “post” i begyndelsen af dem.

{
"scripts": {
"precompress": {
"precompress": "{{ udføres FØR scriptet `compress` }}}",
"compress":
"compress": "{{ kører kommando til at komprimere filer }}}",
"postcompress": "{{ run command to compress files }}",
"postcompress": "{{ eksekveres EFTER `compress` scriptet }}"
}
}

Livscyklus-scripts

Der er nogle særlige livscyklus-scripts, som kun sker i visse situationer. Disse scripts forekommer i tillæg til “pre”- og “post”-scriptet.

  • prepare, prepublish, prepublishOnly, prepack, postpack

prepare (siden [email protected])

  • Kører FØR pakken pakkes
  • Kører FØR pakken offentliggøres
  • Kører på local npm install uden argumenter
  • Kører EFTER prepublish, men FØR prepublishOnly
  • OPMÆRKNING: Hvis en pakke, der installeres via git, indeholder et prepare-script, vil dets dependencies og devDependencies blive installeret, og forberedelsesscriptet vil blive kørt, før pakken pakkes og installeres.

prepublish (DEPRECATED)

  • Samme som prepare

prepublishOnly

  • Kører INDEN pakken er forberedt og pakket, KUN på npm publish.

prepack

  • Kører FØR en tarball pakkes (på “npm pack“, “npm publish” og ved installation af en git-afhængighed).
  • BEMÆRK: “npm run pack” er IKKE det samme som “npm pack“. “npm run pack” er et vilkårligt brugerdefineret scriptnavn, hvorimod “npm pack” er en CLI-defineret kommando.

postpack

  • Kører, EFTER at tarball’en er blevet genereret og flyttet til sin endelige destination.

Forbered og prepublish

Deprecisering Bemærk: prepublish

Siden [email protected] har npm CLI kørt prepublish-scriptet for både npm publish og npm install, fordi det er en praktisk måde at forberede en pakke til brug på (nogle almindelige anvendelsestilfælde er beskrevet i afsnittet nedenfor). Det har også vist sig at være, i praksis, meget forvirrende. Fra [email protected] er der indført en ny begivenhed, prepare, som bevarer denne eksisterende adfærd. En ny hændelse, prepublishOnly, er blevet tilføjet som en overgangsstrategi for at give brugerne mulighed for at undgå den forvirrende adfærd i de eksisterende npm-versioner og kun køre på npm publish (f.eks. for at køre testene en sidste gang for at sikre, at de er i god form).

Se https://github.com/npm/npm/issues/10074 for en meget længere begrundelse, med yderligere læsning, for denne ændring.

Use Cases

Hvis du har brug for at udføre operationer på din pakke, før den bruges, på en måde, der ikke er afhængig af målsystemets operativsystem eller arkitektur, skal du bruge et prepublish script. Dette omfatter opgaver som:

  • Kompilering af CoffeeScript-kildekode til JavaScript.
  • Skabelse af minificerede versioner af JavaScript-kildekode.
  • Hentning af fjernressourcer, som din pakke vil bruge.

Førdelen ved at udføre disse ting på prepublish tidspunktet er, at de kan udføres én gang, et enkelt sted, hvilket reducerer kompleksiteten og variabiliteten. Derudover betyder det, at:

  • Du kan afhænge af coffee-script som en devDependency, og dermed behøver dine brugere ikke at have den installeret.
  • Du behøver ikke at inkludere minifiers i din pakke, hvilket reducerer størrelsen for dine brugere.
  • Du behøver ikke at stole på, at dine brugere har curl eller wget eller andre systemværktøjer på målmaskinerne.

Livscyklus Driftsorden

npm publish

  • prepublishOnly
  • prepare
  • prepublish
  • publish
  • postpublish

npm pack

  • prepack
  • postpack

npm install

  • preinstall
  • install
  • postinstall

Alligevel udløser

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

npm start

npm run start har en npm start forkortelse.

  • prestart
  • start
  • poststart

Standardværdier

npm vil standardisere nogle scriptværdier baseret på pakkens indhold.

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

    Hvis der er en server.js-fil i roden af din pakke, så vil npm standardindstille start-kommandoen til node server.js.

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

    Hvis der er en binding.gyp-fil i roden af din pakke, og duikke har defineret dine egne install– eller preinstall-scripts, vil npm standardisere install-kommandoen til at kompilere ved hjælp af node-gyp.

User

Hvis npm blev kaldt med root-privilegier, vil den ændre uid til den brugerkonto eller det uid, der er angivet i user config, som er standard nobody. Sæt unsafe-perm-flaget for at køre scripts med root-privilegier.

Environment

Pakkescripts køres i et miljø, hvor mange oplysninger er tilgængelige vedrørende opsætningen af npm og processens aktuelle tilstand.

path

Hvis du er afhængig af moduler, der definerer eksekverbare scripts, som f.eks. testsuites, vil disse eksekverbare scripts blive tilføjet til PATH forexeksekveringen af scripts. Så hvis din package.json har dette:

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

så kan du køre npm start for at udføre bar-scriptet, som eksporteres til node_modules/.bin-mappen på npm install.

package.json vars

Felterne i package.json er hæftet på npm_package_-præfikset. Så hvis du f.eks. havde {"name":"foo", "version":"1.2.5"} i dinpackage.json-fil, ville dine pakkescripts havenpm_package_name-miljøvariablen sat til “foo” ognpm_package_version sat til “1.2.5”. Du kan få adgang til disse variabler i din kode med process.env.npm_package_name ogprocess.env.npm_package_version, og så videre for andre felter.

konfiguration

Konfigurationsparametre sættes i miljøet med præfiksetnpm_config_. Du kan f.eks. se den effektive rootconfig ved at kontrollere miljøvariablen npm_config_root.

Special: package.json “config”-objekt

Nøglerne i package.json “config” overskrives i miljøet, hvis der er en config-parameter på <name>:<key>. Hvis package.json f.eks. har dette:

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

og server.js er denne:

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

så kan brugeren ændre adfærden ved at gøre:

npm config set foo:port 80

current lifecycle event

Sidst er miljøvariablen npm_lifecycle_event indstillet tilhvilken fase af cyklussen, der udføres. Så du kan have et enkelt script, der bruges til forskellige dele af processen, og som skifter alt efter, hvad der sker i øjeblikket.

Objekter flatteres efter dette format, så hvis du havde{"scripts":{"install":"foo.js"}} i din pakke.json, så ville du se dette i scriptet:

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

Eksempler

For eksempel, hvis din package.json indeholder dette:

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

så vil scripts/install.js blive kaldt for installations- og post-installationsfaserne i livscyklusen, og scripts/uninstall.js vil blive kaldt, når pakken afinstalleres. Dascripts/install.js kører for to forskellige faser, vil det i dette tilfælde være klogt at se på miljøvariablen npm_lifecycle_event.

Hvis du ønsker at køre en make-kommando, kan du gøre det. Dette virker fint:

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

Afslutter

Scripts køres ved at sende linjen som et scriptargument til sh.

Hvis scriptet afsluttes med en anden kode end 0, vil dette afbrydeprocess.

Bemærk, at disse scriptfiler ikke behøver at være nodejs- eller enddajavascript-programmer. De skal bare være en slags eksekverbar fil.

Hook-scripts

Hvis du ønsker at køre et bestemt script ved en bestemt livscyklusbegivenhed for ALLE pakker, kan du bruge et hook-script.

Placér en eksekverbar fil ved node_modules/.hooks/{eventname}, og den vil blive kørt for alle pakker, når de gennemgår dette punkt i pakkens livscyklus for alle pakker, der er installeret i denne rod.

Hook-scripts køres på nøjagtig samme måde som package.json-scripts.Det vil sige, de er i en separat underordnede proces, med den env, der er beskrevet ovenfor.

Bedste praksis

  • Afslut ikke med en fejlkode, der ikke er nul, medmindre du virkelig mener det.Bortset fra afinstallationsskripter vil dette medføre, at npm-handlingen fejler, og potentielt bliver rullet tilbage. Hvis fejlen er mindre eller kun vil forhindre nogle valgfrie funktioner, så er det bedre blot at udskrive en advarsel og afslutte med succes.
  • Forsøg ikke at bruge scripts til at gøre det, som npm kan gøre for dig. Læs igennempackage.json for at se alle de ting, du kan angive og aktivere ved blot at beskrive din pakke på passende vis. Generelt vil dette føre til en mere robust og konsistent tilstand.
  • Inspicér env’en for at bestemme, hvor tingene skal placeres. Hvis f.eks. miljøvariablen npm_config_binroot er sat til /home/user/bin, skal du ikke forsøge at installere eksekverbare filer i /usr/local/bin. Brugeren har sandsynligvis sat den op på den måde af en grund.
  • Lad være med at give dine scriptkommandoer et præfiks med “sudo”. Hvis root-tilladelser er påkrævet af en eller anden grund, vil det mislykkes med denne fejl, og brugeren vil sudo den pågældende npm-kommando.
  • Brug ikke install. Brug en .gyp-fil til kompilering, og prepublish til alt andet. Du bør næsten aldrig eksplicit skulle skulle indstille etpreinstall- eller install-script. Hvis du gør dette, bedes du overveje, om der er en anden mulighed. Den eneste gyldige brug af install eller preinstallskripter er til kompilering, som skal foretages på målarkitekturen.

Se også

  • npm run-script
  • package.json
  • npm developers
  • npm install
  • npm install
  • Skriv et svar Annuller svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

    Arkiver

    • januar 2022
    • december 2021
    • november 2021
    • oktober 2021
    • september 2021

    Meta

    • Log ind
    • Indlægsfeed
    • Kommentarfeed
    • 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