Mam projekt Node.js, który wymaga Node w wersji 12 lub wyższej. Czy istnieje sposób na określenie tego w pliku packages.json, aby instalator automatycznie sprawdził i poinformował użytkowników o konieczności aktualizacji?
Mam projekt Node.js, który wymaga Node w wersji 12 lub wyższej. Czy istnieje sposób na określenie tego w pliku packages.json, aby instalator automatycznie sprawdził i poinformował użytkowników o konieczności aktualizacji?
Odpowiedzi:
Myślę, że możesz użyć pola „silniki”:
{ "engines" : { "node" : ">=0.12" } }
Ponieważ mówisz, że Twój kod na pewno nie będzie działał z żadnymi niższymi wersjami, prawdopodobnie chcesz też flagi „engineStrict”:
{ "engineStrict" : true }
Dokumentacja pliku package.json znajduje się na stronie npmjs
Aktualizacja
engineStrict
jest teraz przestarzałe, więc będzie to tylko ostrzeżenie. Teraz to użytkownik musi uruchomić, npm config set engine-strict true
jeśli tego chce.
Aktualizacja 2
Jak wskazano poniżej, utworzenie .npmrc
pliku w katalogu głównym projektu (na tym samym poziomie co plik package.json) z tekstem engine-strict=true
wymusi błąd podczas instalacji, jeśli wersja węzła nie jest kompatybilna.
engineStrict
jest przestarzała przez kilka miesięcy, powodując wyświetlanie ostrzeżeń, gdy była używana. Począwszy od npm @ 3, wartość parametru pole jest ignorowane, a naruszenia silnika będą generować tylko ostrzeżenia. Jeśli jako użytkownik chcesz mieć ścisłe wymuszenie w terenie silników, po prostu uruchom npm config set motor-strict true ”
cd .. && npm i <folder-name>
, aby sprawdzić sam projekt. Spowoduje to jednak uruchomienie całego kompilacji.
engine-strict=true
do .npmrc ma teraz ten sam efekt
Dodaj
do package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
do pliku .npmrc
(blisko tego package.json
samego katalogu)
engine-strict=true
npm install
; współpracuje yarn
również z
package.json
z sekcją „silniki” podobną do powyższej ( 11.13.0
i 6.7.0
) oraz .npmrc
z niczym innym, jak zawartością powyżej. Miałem nvm przestawił mnie na starszą wersję węzła, a następnie uruchomiłem npm install
, ale to po prostu instaluje zależności i nawet nie wspomina o niezgodności wersji silnika.
Tak jak powiedział Ibam, engineStrict
jest teraz przestarzały. Ale znalazłem to rozwiązanie:
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"
}
}
Dowiedz się więcej tutaj: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
I jeszcze jedno. Pliku dot. „.Nvmrc” można użyć do wymagania określonej wersji węzła - https://github.com/creationix/nvm#nvmrc
Ale jest to przestrzegane tylko przez skrypty npm (i skrypty przędzy).
.nvmrc
Jeśli używasz NVM w ten sposób , co prawdopodobnie powinieneś, możesz wskazać wersję nodejs wymaganą dla danego projektu w .nvmrc
pliku śledzenia git :
echo v10.15.1 > .nvmrc
Nie działa to automatycznie cd
, co jest rozsądne: użytkownik musi wtedy:
nvm use
a teraz ta wersja węzła zostanie użyta dla bieżącej powłoki.
Możesz wyświetlić listę posiadanych wersji węzła:
nvm list
.nvmrc
jest udokumentowany na stronie : https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Jak automatycznie wybrać tę wersję węzła, cd
zapytano na: Automatycznie przełącz na poprawną wersję węzła na podstawie projektu
Testowane z NVM 0.33.11.
Istnieje inny, prostszy sposób:
npm install Node@8
(zapisuje węzeł 8 jako zależność w pliku package.json)Działa node
to, ponieważ jest to tylko pakiet, który dostarcza węzeł jako pakiet binarny. Zawiera tylko jako node_module / .bin, co oznacza, że udostępnia węzeł tylko dla pakietów skryptów. Nie główna powłoka.
Zobacz dyskusję na Twitterze tutaj: https://twitter.com/housecor/status/962347301456015360
./node node-sass
a nie tylko node-sass
. Nie jestem pewien, czy to samo dla wszystkich plików .bin.
Przykład przypadku testowego 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);
});});