web-dev-qa-db-fra.com

Comment puis-je spécifier la version requise de Node.js dans packages.json?

J'ai un projet Node.js nécessitant Node version 12 ou supérieure. Existe-t-il un moyen de spécifier cela dans le fichier packages.json, de sorte que le programme d'installation vérifie automatiquement et informe les utilisateurs s'ils doivent mettre à niveau?

122
Erel Segal-Halevi

Je pense que vous pouvez utiliser le champ "moteurs":

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

Comme vous dites que votre code ne fonctionnera certainement pas avec les versions inférieures, vous voudrez probablement aussi l'indicateur "engineStrict":

{ "engineStrict" : true }

La documentation du fichier package.json est disponible sur le site npmjs

Mettre à jour

engineStrict est maintenant obsolète, cela ne donnera donc qu'un avertissement. Il appartient maintenant à l'utilisateur d'exécuter npm config set engine-strict true s'il le souhaite.

153
IBam

Comme dit Ibam, engineStrict est maintenant obsolète. Mais j'ai trouvé cette solution:

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"
  }
}

Plus d'informations ici: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

Et encore une chose…. Un fichier .nvmrc peut être utilisé pour exiger une version de noeud spécifique (mais je ne l’ai pas encore essayé) - https://github.com/creationix/nvm#nvmrc

31
Adam

Il existe un autre moyen plus simple de procéder:

  1. npm install Node@8 (enregistre le noeud 8 en tant que dépendance dans package.json)
  2. Votre application fonctionnera sous Node 8 pour any, même les utilisateurs de Yarn!

Cela fonctionne parce que node est simplement un paquet qui envoie le noeud en tant que paquet binaire. Il inclut uniquement le paramètre node_module/.bin, ce qui signifie qu'il ne rend les nœuds disponibles que pour les scripts de package. Pas Shell principal.

Voir la discussion sur Twitter ici: https://Twitter.com/housecor/status/962347301456015360

2
vnglst

Un exemple de scénario de test Mocha:

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);
    });});
0

.nvmrc

Si vous êtes en utilisant NVM comme ceci , ce que vous devriez probablement, vous pouvez alors indiquer la version de nodejs requise pour un projet donné dans un fichier .nvmrc git-suivi:

echo v10.15.1 > .nvmrc

Cela ne prend pas effet automatiquement sur cd, ce qui est normal: l'utilisateur doit alors faire:

nvm use

et maintenant cette version du noeud sera utilisée pour le shell actuel.

Vous pouvez lister les versions de noeud que vous avez avec:

nvm list

.nvmrc est documenté à l'adresse suivante: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc }

Testé avec NVM 0.33.11.