všetci čo flamia node.js zrejme s nim ani nepracovali, a ak ano, tak ho používali špatne... to je jak kdyby ste nadávali na to že když si nalejete vodu na tácku a znej pijete že je tácka k ničomu. Node.js neni vôbec špatný, len treba vedieť na čo ho použiť, kdy ho použiť, a ako ho použiť.
To je jak systemd-speak:
"všetci čo flamia systemd zrejme s nim ani nepracovali, a ak ano, tak ho používali špatne... to je jak kdyby ste nadávali na to že když si nalejete vodu na tácku a znej pijete že je tácka k ničomu. Systemd neni vôbec špatný, len treba vedieť na čo ho použiť, kdy ho použiť, a ako ho použiť."
No ja si vodu naliju do sklinky misto na tacek, pac tacek je na piti vody fakt k nicemu. Tudiz ho nepotrebuju. Staci stara dobra sklinka :)
Je to reprodukovatelné jako jiné package managery - hint verzovani a restrikce. Až po "je to dneska někde online". Co je u Node a obecně js ekosystemu problem je rychle zastaravani balicku a casto prekotne zpetne nekompatibilni nove verze. Pokud si tedy na kazdou blbinu nekdo natahne balik, lehce se mu stane ze pak kvuli nejake blbine nic neupdatuje aby mohl naolinstalovat dalsi blbinu ktera chce nove verze vseho. To je ale problem vyvojarsky na vsech stranach a sposty ekosystemu okolo spravcu nikoliv samotnych spravcu balicku
A jak reprodukujete ty online balicky v offline prostredi? Treba na 1k+ serveru? Tar na nejakou dir kterou pak rozbalis vsude? U rpm natlacim balicky kam potrebuji a nainstaluji. U node.js? Nikdo z developeru mi rozumne nedokazal vysvetlit jak reprodukovat cokoliv z node.js na produkci ktera si netaha nic z internetu.
Možná to je mezi židlí a klávesnicí. Tak mi ale prosím řekni, jak NPM přimět, aby nějaký node včetně celého stromu závislostí složil off-line z lokálních souborů. Já jsem tedy žádné funkční řešení nenašel. Jen stížnosti, že to nejde, a odpovědi vývojářů, že to je proti filozofii celého systému.
Co se týče reprodukovatelných buildů. tak k tomu slouží package-lock.json, který zajistí, že se použijí vždy ty samé verze knihoven včetně závislostí.
Nějaké harakiri se skládáním z lokálních souborů k tomu vůbec nepotřebuješ. Hlavně proto, že bys musel nějak zajistit, aby byly offline lokálně dostupné všechny dependence.
Pokud máš potřebu pouštět "npm install" na počítači, který nemá přístup k internetu, tak bych spíš tipoval, že používáš nějaký fatálně chybný postup typu "nakopíruju zdrojáky na produkční server a tam teprve aplikaci zkompiluju". Řešení není donutit NPM instalovat offline, ale používat profesionálnější provozní postupy - typicky sestavit na build serveru balíček aplikace a na servery instalovat ten.
Pokud bys _náhodou_ měl opravdu legitimní důvod pouštět build aplikace na offline serveru, tak nejjednodušší je prostě přenést sakumprásk adresář node_modules. A nemusíš ten npm install vůbec pouštět.
Jinak je možné dělat nějaké čachry s nastavením repository pro NPM na nějaký server v lokální síti (nebo localhost), ale to je opravdu komplikovaná cesta, kterou bych se nevydával, pokud bych absolutně nemusel.
Sestavení provádíme na vývojářských strojích, na cílovém by to ani nešlo, protože je to embedded, které na to nedostačuje (viz další odstavec).
NPM se spouštět musí, protože existují nody, které nejsou čistě v JS, ale mají část třeba v C (např. node-authenticate-pam nebo node-red-lwm2m). A na to potřebuješ různá komplexní buildovací prostředí (ta jako doplnění k prvnímu odstavci, aby se někdo nedivil, že to zařízení zvládá obecně Node.js, ale ne NPM).
Zamknout to přes package-lock.json jsem samozřejmě zkoušel. Funguje to, ale jen v prvním levelu. U zanořených závislostí to prostě občas ignoruje.
Co se týká off-line, tak problém je, že my musíme zákazníkovi zaručit stále stejný produkt, ale nám nikdo nezaručí, že z repozitáře se ta jedna konkrétní verze jedné z tisíců závislostí, jednoho dne neztratí. Zkoušel jsem v package-lock.json zadat node pomocí file://, ale opět, u zanořených závislostí to občas ignoruje.
@Kolja
A no co ti brání si to zkopírovat do složky a pak to distribuovat odtud?
"ale nám nikdo nezaručí, že z repozitáře se ta jedna konkrétní verze jedné z tisíců závislostí, jednoho dne neztratí."
No to ale není chyba NPM. To je obecná vlastnost toho, když si uděláš závislosts na něčem veřejném nad čím nemáš kontrolu.