Skip to content

Archives

  • Leden 2022
  • Prosinec 2021
  • Listopad 2021
  • Říjen 2021
  • Září 2021

Categories

  • Žádné rubriky
Trend RepositoryArticles and guides
Articles

scripts

On 17 prosince, 2021 by admin
Tabulka obsahu
  • Popis
  • Před & Post skripty
  • Skripty životního cyklu
  • Připravit a předzveřejnit
  • Pořadí operací životního cyklu
  • npm publish
  • npm pack
  • npm install
  • npm start
  • Výchozí hodnoty
  • Uživatel
  • Prostředí
  • cesta
  • package.json vars
  • konfigurace
  • Speciální: package.json „config“ objekt
  • aktuální událost životního cyklu
  • Příklady
  • Ukončení
  • Hákové skripty
  • Osvědčené postupy
  • Viz také

Popis

Vlastnost "scripts" vašeho souboru package.json podporuje řadu vestavěných skriptů a jejich přednastavené události životního cyklu i libovolné skripty. Ty všechny lze spustit spuštěním npm run-script <stage> nebo zkráceně npm run <stage>. I pro ně budou spuštěny předběžné a následné příkazy se shodnými názvy (např. premyscript, myscript, postmyscript). Skripty ze závislostí lze spustit pomocí npm explore <pkg> -- npm run <stage>.

Před & Post skripty

Chcete-li vytvořit „pre“ nebo „post“ skripty pro libovolné skripty definované v sekci "scripts" package.json, jednoduše vytvořte další skript s odpovídajícím názvem a na jejich začátek přidejte „pre“ nebo „post“.

{
"scripts": {3740>
"precompress": "{{ provede se PŘED skriptem `compress` }}",
"compress": "{{ spustí příkaz pro kompresi souborů }}",
"postcompress": "{{ provede se PO skriptu `compress` }}"
}
}

Skripty životního cyklu

Existují některé speciální skripty životního cyklu, které probíhají pouze v určitých situacích. Tyto skripty se dějí navíc ke skriptům "pre" a "post".

  • prepare, prepublish, prepublishOnly, prepack, postpack

prepare (od [email protected])

  • Spustí se PŘED zabalením balíčku
  • Spustí se PŘED zveřejněním balíčku
  • Spustí se na místním npm install bez argumentů
  • Spustí se PO prepublish, ale PŘED prepublishOnly
  • POZN: Pokud balíček instalovaný přes git obsahuje skript prepare, budou před zabalením a instalací balíčku nainstalovány jeho dependencies a devDependencies a spuštěn skript prepare.

prepublish (DEPRECATED)

  • Stejné jako prepare

prepublishOnly

  • Spustí se PŘED přípravou a zabalením balíčku, POUZE na npm publish.

prepack

  • Spustí se PŘED zabalením tarballu (na „npm pack„, „npm publish“ a při instalaci závislostí git).
  • Poznámka: „npm run pack“ NENÍ totéž co „npm pack„. „npm run pack“ je libovolný název skriptu definovaný uživatelem, kdežto „npm pack“ je příkaz definovaný CLI.

postpack

  • Spustí se PO vygenerování tarballu a jeho přesunutí na místo určení.

Připravit a předzveřejnit

Poznámka: prepublish

Od [email protected] spustí npm CLI skript prepublish jak pro npm publish, tak pro npm install, protože je to pohodlný způsob, jak připravit balíček k použití (některé běžné případy použití jsou popsány v části níže). Ukázalo se také, že je v praxi velmi matoucí. Od [email protected] byla zavedena nová událost prepare, která toto stávající chování zachovává. Jako přechodná strategie byla přidána nová událost prepublishOnly, která uživatelům umožňuje vyhnout se matoucímu chování stávajících verzí npm a spouštět pouze na npm publish (například poslední spuštění testů, aby se ujistili, že jsou v dobré kondici).

Daleko delší zdůvodnění této změny s dalším čtením najdete v https://github.com/npm/npm/issues/10074.

Případy použití

Pokud potřebujete provést operace s balíčkem před jeho použitím způsobem, který není závislý na operačním systému nebo architektuře cílového systému, použijte skript prepublish. Patří sem úlohy jako:

  • Kompilování zdrojového kódu jazyka CoffeeScript do jazyka JavaScript.
  • Vytváření minifikovaných verzí zdrojového kódu jazyka JavaScript.
  • Vyhledávání vzdálených zdrojů, které bude váš balíček používat.

Výhodou provádění těchto činností v čase prepublish je, že je lze provést jednou, na jednom místě, čímž se sníží složitost a variabilita. Navíc to znamená, že:

  • Můžete záviset na coffee-script jako na devDependency, a tak jej vaši uživatelé nemusí mít nainstalovaný.
  • Nemusíte do balíčku zahrnovat minifikátory, čímž se zmenší velikost pro uživatele.
  • Nemusíte spoléhat na to, že uživatelé mají na cílových počítačích curl nebo wget či jiné systémové nástroje.

Pořadí operací životního cyklu

npm publish

  • prepublishOnly
  • prepare
  • prepublish
  • publish
  • postpublish

npm pack

  • prepack
  • postpack

npm install

  • preinstall
  • install
  • postinstall

Také spouští

  • . prepublish (při lokálním)
  • prepare (při lokálním)

npm start

npm run start má zkratku npm start.

  • prestart
  • start
  • poststart

Výchozí hodnoty

npm nastaví výchozí hodnoty některých skriptů na základě obsahu balíčku.

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

    Pokud je v kořenovém adresáři balíčku soubor server.js, pak npmw implicitně nastaví příkaz start na node server.js.

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

    Pokud je v kořeni vašeho balíčku soubor binding.gyp a vy jste nedefinovali vlastní skripty install nebo preinstall, npm přednastaví příkaz install pro kompilaci pomocí node-gyp.

Uživatel

Pokud bylo npm vyvoláno s právy roota, pak změní uidna uživatelský účet nebo uid zadané v konfiguraci user, což je ve výchozím nastavení nobody. Nastavte příznak unsafe-perm pro spouštění skriptů s právy roota.

Prostředí

Skripty balíčků se spouštějí v prostředí, kde je k dispozici mnoho informací týkajících se nastavení npm a aktuálního stavu procesu.

cesta

Pokud jste závislí na modulech, které definují spustitelné skripty, jako například testsuites, pak budou tyto spustitelné soubory přidány do PATH pro spouštění skriptů. Pokud tedy váš package.json obsahuje toto:

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

poté byste mohli spustit npm start a spustit skript bar, který jeexportován do adresáře node_modules/.bin na npm install.

package.json vars

Pole package.json jsou připojena na předponu npm_package_. Pokud byste tedy například v souborupackage.json měli {"name":"foo", "version":"1.2.5"}, pak by vaše skripty balíčků měly proměnnou prostředínpm_package_name nastavenou na „foo“ a proměnnou prostředínpm_package_version na „1.2.5“. K těmto proměnným můžete ve svém kódu přistupovat pomocí process.env.npm_package_name aprocess.env.npm_package_version a tak dále pro další pole.

konfigurace

Konfigurační parametry se do prostředí vkládají s předponounpm_config_. Například efektivní rootkonfiguraci můžete zobrazit kontrolou proměnné prostředí npm_config_root.

Speciální: package.json „config“ objekt

Klíče package.json „config“ jsou v prostředí přepsány, pokud je parametr config <name>:<key>. Pokud má package.json například toto:

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

a server.js je tento:

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

pak by uživatel mohl změnit chování provedením:

npm config set foo:port 80

aktuální událost životního cyklu

Nakonec je proměnná prostředí npm_lifecycle_event nastavena na tu fázi cyklu, která se právě provádí. Můžete tedy mít jeden skript používaný pro různé části procesu, který se přepíná podle toho, co se právě děje.

Objekty se zplošťují podle tohoto formátu, takže pokud byste měli v balíčku{"scripts":{"install":"foo.js"}}.json, pak byste ve skriptu viděli toto:

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

Příklady

Pokud váš package.json obsahuje například toto:

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

tedy scripts/install.js bude volán pro instalační a poinstalační fázi životního cyklu a scripts/uninstall.js bude volán při odinstalování balíčku. Protože se scripts/install.js spouští pro dvě různé fáze, bylo by v tomto případě rozumné podívat se na proměnnou prostředí npm_lifecycle_event.

Pokud chcete spustit příkaz make, můžete tak učinit. Toto funguje bezvadně:

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

Ukončení

Skripty se spouštějí předáním řádku jako argumentu skriptu sh.

Pokud skript skončí s jiným kódem než 0, pak se přerušíproces.

Všimněte si, že tyto soubory skriptů nemusí být programy nodejs nebo dokoncejavascript. Musí to být jen nějaký spustitelný soubor.

Hákové skripty

Pokud chcete spustit určitý skript při určité události životního cyklu pro VŠECHNY balíčky, pak můžete použít hákový skript.

Umístěte spustitelný soubor na node_modules/.hooks/{eventname} a ten se spustí pro všechny balíčky, když procházejí tímto bodem v životním cyklu balíčků pro všechny balíčky nainstalované v tomto kořenu.

Skripty s háčky se spouštějí úplně stejně jako skripty package.json, to znamená, že jsou v samostatném podřízeném procesu s výše popsaným env.

Osvědčené postupy

  • Neukončujte činnost s nenulovým chybovým kódem, pokud to nemyslíte opravdu vážně. s výjimkou odinstalačních skriptů to způsobí, že akce npm selže a případně bude vrácena zpět. Pokud je chyba drobná nebo jen zabrání některým volitelným funkcím, pak je lepší jen vypsat varování a úspěšně ukončit.
  • Snažte se nepoužívat skripty k tomu, co za vás může udělat npm. Přečtěte sipackage.json, abyste zjistili, co všechno můžete určit a povolit tím, že svůj balíček jednoduše vhodně popíšete. Obecně to povede k robustnějšímu a konzistentnějšímu stavu.
  • Prohlédněte si env, abyste zjistili, kam co umístit. Pokud je například proměnná prostředí npm_config_binroot nastavena na /home/user/bin, nepokoušejte se instalovat spustitelné soubory do /usr/local/bin. Uživatel ji tak pravděpodobně nastavil z nějakého důvodu.
  • Nepředkládejte příkazům skriptů předponu „sudo“. Pokud jsou z nějakého důvodu vyžadována práva roota, pak to selže s touto chybou a uživatel bude daný příkaz npm sudo.
  • Nepoužívejte install. Pro kompilaci použijte soubor .gyp a pro cokoli jiného prepublish. Téměř nikdy byste neměli muset explicitně nastavovat apreinstalační nebo instalační skript. Pokud to děláte, zvažte, zdaexistuje jiná možnost. Jediné platné použití install nebo preinstallskriptů je pro kompilaci, která musí být provedena na cílové architektuře.

Viz také

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

.

Napsat komentář Zrušit odpověď na komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Archivy

  • Leden 2022
  • Prosinec 2021
  • Listopad 2021
  • Říjen 2021
  • Září 2021

Základní informace

  • Přihlásit se
  • Zdroj kanálů (příspěvky)
  • Kanál komentářů
  • Česká lokalizace
  • 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