2015-03-30 10 views
61

Mam projekt Node.js, który wymaga węzła w wersji 12 lub nowszej. Czy istnieje sposób na określenie tego w pliku packages.json, aby instalator automatycznie sprawdzał i informował użytkowników, czy muszą dokonać aktualizacji?Jak mogę określić wymaganą wersję Node.js w packages.json?

+0

podobny sposób do odpowiedzi Adama, także przy użyciu node.version: https://stackoverflow.com/a/48691987/3032209 –

Odpowiedz

83

myślę, że można użyć „Silniki” murawę:

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

Jak mówisz kod na pewno nie będzie działać ze wszystkimi wersjami niższe, prawdopodobnie chcesz flagę „engineStrict” zbyt:

{ "engineStrict" : true } 

Dokumentacja pliku packages.json można znaleźć on the npmjs site

Aktualizacja

engineStrict jest teraz przestarzałe, więc ostrzeże to tylko. Teraz to użytkownik musi uruchomić npm config set engine-strict true, jeśli tego chce.

+5

https://github.com/npm /npm/blob/master/CHANGELOG.md#enginestrict "Rzadko używana opcja package.json" engineStrict "została ** przestarzała ** przez kilka miesięcy, generując ostrzeżenia, kiedy była używana.Począwszy od npm @ 3, wartość pola zostanie zignorowana, a naruszenie instrukcji silnika tylko spowoduje wygenerowanie ostrzeżeń. Jeśli ty, jako użytkownik, chcesz egzekwować ścisłe silniki, po prostu uruchom npm config set engine-strict true " –

+0

Pamiętaj, aby' cd .. && npm i 'w celu sprawdzenia dla samego projektu.Jednakże spowoduje to Cała wbudowana w to samo. – mlunoe

+0

dlaczego na tym świecie przestają to robić ... to traci całe swoje znaczenie – Filippos

19

Tak jak powiedział Ibam, engineStrict jest teraz przestarzałe. Ale znalazłem tego rozwiązania:

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

dowiedzieć się więcej tutaj: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4

.nvmrc

I jeszcze jedno ... dotfile „.nvmrc” może być używane dla wymagających specyficznej wersji węzła (ale nie próbowałem go jeszcze) - https://github.com/creationix/nvm#nvmrc

3

Jest inna, prostsza sposobem, aby to zrobić:

  1. npm install [email protected] (oszczędza węzła 8 jako zależność w package.json)
  2. Twoja aplikacja będzie działać przy użyciu węzła 8 do nikogo - nawet użytkownicy Przędza!

Działa to, ponieważ node to tylko pakiet, który wysyła węzeł jako plik binarny pakietu. Zawiera on po prostu node_module/.bin, co oznacza, że ​​udostępnia on węzeł tylko skryptom pakietów. Nie główna powłoka.

patrz dyskusja na Twitterze tutaj: https://twitter.com/housecor/status/962347301456015360

Powiązane problemy