wake-up-neo.com

Wie kann ich die erforderliche Node.js-Version in packages.json angeben?

Ich habe ein Node.js-Projekt, das die Node-Version 12 oder höher erfordert. Gibt es eine Möglichkeit, dies in der Datei packages.json anzugeben, damit das Installationsprogramm die Benutzer automatisch überprüft und informiert, wenn ein Upgrade erforderlich ist?

122

Ich denke, Sie können das Feld "Engines" verwenden:

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

Da Sie sagen, dass Ihr Code definitiv nicht mit einer niedrigeren Version funktioniert, möchten Sie wahrscheinlich auch das Kennzeichen "engineStrict":

{ "engineStrict" : true }

Die Dokumentation für die package.json-Datei finden Sie auf der npmjs-Site

Update

engineStrict ist jetzt veraltet, daher wird nur eine Warnung ausgegeben. Es ist jetzt an dem Benutzer, npm config set engine-strict true auszuführen, wenn er dies möchte.

153
IBam

Hinzufügen

zu package.json

  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },

in die Datei .npmrc (nahe an package.json, gleiches Verzeichnis)

engine-strict=true
36
Mikel

Wie bereits gesagt, ist engineStrict jetzt veraltet. Aber ich habe diese Lösung gefunden:

check-version.js:

import semver from 'semver';
import { engines } from './package';

const version = engines.node;
if (!semver.satisfies(process.version, version)) {
  console.log(`Required node version ${version} not satisfied with current version ${process.version}.`);
  process.exit(1);
}

package.json:

{
  "name": "my package",
  "engines": {
    "node": ">=50.9" // intentionally so big version number
  },
  "scripts": {
    "requirements-check": "babel-node check-version.js",
    "postinstall": "npm run requirements-check"
  }
}

Weitere Informationen finden Sie hier: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

Und noch etwas ....... Eine Punktdatei '.nvmrc' kann verwendet werden, um eine bestimmte Knotenversion zu erfordern (aber ich habe es noch nicht probiert) - https://github.com/creationix/nvm#nvmrc

31
Adam

Es gibt einen anderen, einfacheren Weg, dies zu tun:

  1. npm install [email protected] (speichert Knoten 8 als Abhängigkeit in package.json)
  2. Ihre App wird mit Node 8 für anyone ausgeführt - auch für Garnbenutzer!

Dies funktioniert, weil node nur ein Paket ist, das Knoten als Paketbinär versendet. Es enthält nur node_module/.bin, was bedeutet, dass nur Knoten für Paketskripte verfügbar sind. Nicht Hauptschale.

Siehe die Diskussion auf Twitter hier: https://Twitter.com/housecor/status/962347301456015360

2
vnglst

Ein Beispiel für einen Mokka-Testfall:

describe('Check version of node', function () {
    it('Should test version assert', async function () {

            var version = process.version;
            var check = parseFloat(version.substr(1,version.length)) > 12.0;
            console.log("version: "+version);
            console.log("check: " +check);         
            assert.equal(check, true);
    });});

.nvmrc

Wenn Sie NVM wie folgt verwenden , was Sie wahrscheinlich tun sollten, können Sie die für ein gegebenes Projekt erforderliche Version von nodejs in einer git-tracked .nvmrc-Datei angeben:

echo v10.15.1 > .nvmrc

Dies wirkt sich nicht automatisch auf cd aus, das ist vernünftig: Der Benutzer muss dann Folgendes tun:

nvm use

nun wird diese Knotenversion für die aktuelle Shell verwendet.

Sie können die Versionen des Knotens auflisten, die Sie haben:

nvm list

.nvmrc ist dokumentiert unter: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc

Getestet mit NVM 0.33.11.