У меня есть проект Node.js, для которого требуется Node версия 12 или выше. Есть ли способ указать это в файле packages.json, чтобы установщик автоматически проверял и информировал пользователей о необходимости обновления?
Как я могу указать требуемую версию Node.js в packages.json?
Ответ 1
Я думаю, что вы можете использовать поле "двигатели":
{ "engines" : { "node" : ">=0.12" } }
 Поскольку вы говорите, что ваш код определенно не будет работать с какими-либо более низкими версиями, вы, вероятно, также захотите флаг "engineStrict":
{ "engineStrict" : true }
Документацию по файлу package.json можно найти на сайте npmjs.
Обновить
 engineStrict теперь не рекомендуется, так что это будет только предупреждение. Теперь пользователь может запустить npm config set engine-strict true если он этого хочет.
Ответ 2
Как и сказал Ибам, engineStrict теперь устарел. Но я нашел это решение:
чек-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" может использоваться для использования определенной версии node (но я еще не пробовал ее) - https://github.com/creationix/nvm#nvmrc
Ответ 3
добавлять
 в package.json
  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },
  в файл .npmrc (рядом с package.json, тот же каталог)
engine-strict=true
		Ответ 4
Есть еще один, более простой способ сделать это:
-  
npm install [email protected](сохраняет Node 8 как зависимость в package.json) - Ваше приложение будет работать с Node 8 для всех - даже для пользователей Yarn!
 
 Это работает, потому что node - это просто пакет, который отправляет узел как его двоичный пакет. Он просто включает как node_module/.bin, что означает, что он делает узел доступным только для скриптов пакета. Не основная оболочка.
Смотрите обсуждение в Twitter здесь: https://twitter.com/housecor/status/962347301456015360
Ответ 5
  .nvmrc
 Если вы используете NVM, как это, что вам, вероятно, следует, то вы можете указать версию nodejs, необходимую для данного проекта, в файле .nvmrc отслеживанием .nvmrc:
echo v10.15.1 > .nvmrc
  Это не вступает в силу автоматически на cd, что нормально: пользователь должен затем сделать:
nvm use
 и теперь эта версия узла будет использоваться для текущей оболочки.
Вы можете перечислить версии узлов, которые у вас есть:
nvm list
  .nvmrc задокументирован по адресу: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Протестировано с NVM 0.33.11.