scripts
On 17 prosince, 2021 by adminPopis
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 installbez argumentů
- Spustí se PO prepublish, ale PŘEDprepublishOnly
- POZN: Pokud balíček instalovaný přes git obsahuje skript prepare, budou před zabalením a instalací balíčku nainstalovány jehodependenciesadevDependenciesa 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-scriptjako nadevDependency, 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 curlnebowgetč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říkazstartnanode server.js.
- 
"install": "node-gyp rebuild":Pokud je v kořeni vašeho balíčku soubor binding.gypa vy jste nedefinovali vlastní skriptyinstallnebopreinstall, npm přednastaví příkazinstallpro 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_binrootnastavena 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.gypa pro cokoli jinéhoprepublish. 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íinstallnebopreinstallskriptů 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ář