Как указать необходимую версию Node.js в файле package.json?
У меня есть проект на Node.js, который требует версии Node 12 или выше. Можно ли указать это в файле packages.json
, чтобы установщик автоматически проверял и информировал пользователей, если им нужно обновить версию Node?
4 ответ(ов)
Чтобы задать необходимые версии npm
и node
для вашего проекта, вам нужно добавить следующий фрагмент в ваш файл package.json
:
"engines": {
"npm": ">=8.0.0 <9.0.0",
"node": ">=16.0.0 <17.0.0"
},
Этот код указывает, что ваш проект требует npm
версии не ниже 8.0.0 и не выше 9.0.0, а также node
версии не ниже 16.0.0 и не выше 17.0.0.
После этого добавьте следующую строку в файл .npmrc
, который должен находиться в том же каталоге, что и package.json
:
engine-strict=true
С помощью этого параметра установка зависимостей будет строго проверять версии node
и npm
, указанные в вашем package.json
. Если эти версии не соответствуют требованиям, установка зависимостей будет предотвращена.
Как уже упомянул Ibam, engineStrict
теперь устарел. Но я нашел вот такое решение:
check-version.js:
import semver from 'semver';
import { engines } from './package';
const version = engines.node;
if (!semver.satisfies(process.version, version)) {
console.log(`Требуемая версия Node.js ${version} не соответствует текущей версии ${process.version}.`);
process.exit(1);
}
package.json:
{
"name": "my package",
"engines": {
"node": ">=50.9" // намеренно так большой номер версии
},
"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
Еще одна важная деталь. Файл '.nvmrc' можно использовать для указания конкретной версии Node.js - https://github.com/creationix/nvm#nvmrc
Обратите внимание, что он учитывается только в скриптах npm (и yarn).
Есть более простой способ сделать это:
- Выполните команду
npm install node@8
(это добавит Node 8 в зависимости вашего package.json). - Ваше приложение будет работать с Node 8 для всех - даже для пользователей Yarn!
Это работает, потому что node
— это просто пакет, который поставляется с Node в качестве бинарного файла пакета. Он включает его в node_modules/.bin, что означает, что Node доступен только для скриптов пакета, а не для настроек оболочки.
Обсуждение на эту тему можно найти в Twitter: https://twitter.com/housecor/status/962347301456015360
В данном случае строка "engines": { "node": ">=20.0.0" }
определяется в файле package.json
вашего проекта и указывает минимальную версию Node.js, необходимую для его работы. Здесь используется оператор >=
, который означает, что необходимо использовать Node.js версии 20.0.0 или новее. Это является хорошей практикой, так как позволяет гарантировать, что проект будет работать с нужной версией среды выполнения. Если у вас возникли проблемы с версией Node.js, убедитесь, что у вас установлена соответствующая версия или более новая.
Как узнать версию установленного npm пакета?
В чем разница между --save и --save-dev?
Как вывести список установленных пакетов npm?
Установка локального модуля с помощью npm?
Ошибка "npm WARN package.json: Нет поля repository"