У меня есть проект 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.