Zabránit instalaci npm pro nepodporované verze Node.js

Včera jsem zkontroloval žádost o stažení do startéru Gatsby společnosti Contentful a dozvěděl jsem se šikovné podrobnosti o konfiguracích npm.

Cílem požadavku na stažení bylo zaručit, že uživatelé spouštějí projekt s konkrétní verzí Node.js. Můžete tak učinit definováním engines vlastnost ve vašem package.json specifikovat rozsah verzí.

{
  "engines": {
    "node": ">=15.0.0"
  }
}

Ale i když mnoho projektů definuje minimální verzi Node.js, tato package.json konfigurace nevynucuje prostředí. Když spustím npm install v projektu s nepodporovanou verzí Node.js následující varování (EBADENGINE ) se zobrazí.

$ npm install

npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '[email protected]',
npm WARN EBADENGINE   required: { node: '>=15.0.0' },
npm WARN EBADENGINE   current: { node: 'v14.15.0', npm: '7.5.3' }
npm WARN EBADENGINE }

To je vše a vše, co npm dělá v tomto scénáři. Zobrazuje varování, ale neselže a brání uživateli pokračovat.

Jak zabránit npm install s nepodporovanou verzí Node.js

Ukázalo se, že můžete přidat místní konfigurační soubor npm (.npmrc ) do kořenového adresáře modulu/projektu a explicitně zapněte přísné zpracování modulu Node.js.

engine-strict=true

Pokud projekt obsahuje .npmrc který definuje striktní engine, lidé nemohou spustit npm install pokud jejich Node.js nesplňuje požadavek na verzi. 🎉 Varování EBADENGINE se stane chybou a proces instalace selže se stavovým kódem 1 .

$ npm install

npm ERR! code EBADENGINE
npm ERR! engine Unsupported engine
npm ERR! engine Not compatible with your version of node/npm: [email protected]
npm ERR! notsup Not compatible with your version of node/npm: [email protected]
npm ERR! notsup Required: {"node":">=15.0.0"}
npm ERR! notsup Actual:   {"npm":"7.5.3","node":"v14.15.0"}

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/stefanjudis/.npm/_logs/2021-02-21T15_34_32_743Z-debug.log

A co příze?

Yarn nepotřebuje další konfigurační soubor a zpracovává engines vlastnost striktně standardně. Zdá se, že je to správný způsob zpracování verzí Node.js.

$ yarn install

yarn install v1.22.5
info No lockfile found.
[1/5] 🔍  Validating package.json...
error [email protected]: The engine "node" is incompatible with this module. Expected version ">=15.0.0". Got "14.15.0"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

A to je vše, co je potřeba k tomu, aby lidé nemohli používat váš projekt s nepodporovanou verzí Node.js! 🎉 Pokud se vám tento příspěvek líbil, nezapomeňte se podívat na můj týdenní zpravodaj, ve kterém sdílím další informace o vývoji webu, nebo se podívejte na další příspěvky Node.js.