javascript - Je pole "engines" v balíčku npm určené pre používateľov balíčka alebo pre vývojárov?


Som autorom knižnice publikovanej na npm. V jej súbore manifestu balíka pole engines obsahuje aktuálne LTS verzie nástrojov: [email a npm 8.x.x, pretože tieto verzie používam na vývoj a chcem, aby všetci prispievatelia používali rovnakú verziu.

Avšak distribuované súbory knižnice sú skompilované do platformovo nezávislého ES5 JavaScriptu a môžu bežať s oveľa nižšími verziami Node a npm. Obávam sa, že tí, ktorí balík používajú, dostanú falošné varovania pri inštalácii balíka, keď budú pracovať na starších projektoch s nižšími verziami Node.

Ktorú verziu Node by som mal určiť v poli engines súboru package.json? Existuje iný prístup k riešeniu tohto problému?

Odpoveď č. 1

Je pole "engines" v balíku npm určené pre používateľov balíka alebo pre vývojárov?

Pole engines sa používa na kontrolu špecifikovanej verzie Node alebo npm pri inštalácii knižnice, takže je určené pre používateľov.

Pole engines sa používa, keď používate relatívne nové rozhranie API runtime alebo funkciu. Ak váš kód nepoužíva nové rozhranie API alebo funkciu, môžete pole engines vynechať.

Všimnite si, že sa používa iba pre runtime API a funkcie. Aj keď váš kód obsahuje funkciu ESNEXT, ktorá nie je podporovaná, váš používateľ môže použiť transpiler na spustenie kódu. Alebo napríklad, ak ste použili nové natívne fetch API v Node 18, váš používateľ môže nainštalovať fetch polyfill pre Node, ako napríklad node-fetch polyfill, a stále používať vašu knižnicu.

V súčasnosti je pole engines určené iba pre okrajové prípady, kde budete vedieť, že ho potrebujete, keď ho budete potrebovať.

Existuje dokonca aj chat na Google Groups vytvorený zakladateľom NPM, Isaacom Schlueterom, aby sa vrátilo pole engines späť v roku 2012. https://groups.google.com/g/nodejs/c/_ZggTOJQ2Rk