У мене є проект Node.js, для якого потрібна версія Node 12 або новішої. Чи є спосіб вказати це у файлі пакети.json, щоб інсталятор автоматично перевіряв і повідомляв користувачів про необхідність оновлення?
У мене є проект Node.js, для якого потрібна версія Node 12 або новішої. Чи є спосіб вказати це у файлі пакети.json, щоб інсталятор автоматично перевіряв і повідомляв користувачів про необхідність оновлення?
Відповіді:
Я думаю, ви можете використовувати поле "двигуни":
{ "engines" : { "node" : ">=0.12" } }
Як ви говорите, ваш код точно не працюватиме з будь-якими нижчими версіями, ви, мабуть, хочете і прапор "engineStrict":
{ "engineStrict" : true }
Документацію для файлу package.json можна знайти на сайті npmjs
Оновлення
engineStrict
тепер застаріло, тому це лише набере попередження. Тепер користувач повинен запустити, npm config set engine-strict true
якщо вони цього хочуть.
Оновлення 2
Як зазначав Бен нижче, створення .npmrc
файлу в корені проекту (того ж рівня, що і файл package.json) з текстом engine-strict=true
призведе до помилки під час встановлення, якщо версія Node не сумісна.
engineStrict
був застарілий протягом декількох місяців, створюючи попередження при його використанні. Починаючи з npm @ 3, значення поле ігнорується, а порушення роботи двигуна створюватимуть лише попередження. Якщо ви, як користувач, хочете суворого виконання двигунів, просто запустіть npm config встановити строгий істинний механізм "
cd .. && npm i <folder-name>
, щоб перевірити наявність самого проекту. Однак це призведе до цілковитої побудови в ньому самості.
engine-strict=true
до вашого .npmrc тепер має той самий ефект
Додайте
до package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
до файлу .npmrc
(близько до того package.json
самого каталогу)
engine-strict=true
npm install
; працює з yarn
також
package.json
розділ "двигуни", подібний до вищезгаданого ( 11.13.0
і 6.7.0
), і а, .npmrc
окрім вмісту, зазначеного вище. Я мав nvm переключити мене на більш стару версію вузла, потім запустив npm install
, але він просто встановлює залежності і навіть не згадує невідповідність версії двигуна.
Так само, як сказав Ібам, engineStrict
зараз застаріла. Але я знайшов таке рішення:
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"
}
}
Дізнайтеся більше тут: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
І ще одне. Dotfile '.nvmrc' може використовуватися для вимагання конкретної версії вузла - https://github.com/creationix/nvm#nvmrc
Але його дотримуються лише сценарії npm (та сценарії пряжі).
.nvmrc
Якщо ви використовуєте подібний NVM , який ви, мабуть, повинні, тоді ви можете вказати версію nodejs, необхідну для даного проекту, у .nvmrc
файлі, відслідковуваному git :
echo v10.15.1 > .nvmrc
Це не набирає чинності автоматично cd
, що є здоровим: користувач повинен зробити:
nvm use
і тепер ця версія вузла буде використовуватися для поточної оболонки.
Ви можете перелічити версії вузла, які у вас є:
nvm list
.nvmrc
задокументовано за адресою: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Як автоматично вибрати ту версію вузла, на яку cd
було задано питання: Автоматично перемикатися на правильну версію Вузла на основі проекту
Перевірено з NVM 0.33.11.
Є ще один, простіший спосіб зробити це:
npm install Node@8
(зберігає Вузол 8 як залежність у package.json)Це працює, тому що node
це лише пакет, який передає вузол як свій бінарний пакет. Він просто включає node_module / .bin, що означає, що він робить лише вузол доступним для пакунків сценаріїв. Не основна оболонка.
Дивіться дискусію у Twitter тут: https://twitter.com/housecor/status/962347301456015360
./node node-sass
а не просто node-sass
. Не впевнений, чи однаковий для всіх .bin файлів.
Приклад тесту Моча:
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);
});});