Подтвердить что ты не робот

Как я могу указать требуемую версию Node.js в packages.json?

У меня есть проект Node.js, для которого требуется Node версия 12 или выше. Есть ли способ указать это в файле packages.json, чтобы установщик автоматически проверял и информировал пользователей о необходимости обновления?

4b9b3361

Ответ 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

Есть еще один, более простой способ сделать это:

  1. npm install [email protected] (сохраняет Node 8 как зависимость в package.json)
  2. Ваше приложение будет работать с 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.