У меня есть проект Node.js, который требует Node версии 12 или выше. Есть ли способ указать это в файле packages.json, чтобы установщик автоматически проверял и информировал пользователей о необходимости обновления?
У меня есть проект Node.js, который требует Node версии 12 или выше. Есть ли способ указать это в файле packages.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
было устаревшим в течение нескольких месяцев, производя предупреждения , когда она была использована. Начиная с НПМ @ 3, значение из поле игнорируется, а нарушения движка будут приводить только к предупреждению. Если вы, как пользователь, хотите строгое соблюдение правил работы с движками, просто запустите npm config set engine-strict true "
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
сейчас устарела. Но я нашел это решение:
чек-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
И вот еще. Точный файл '.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 файлов.
Пример теста Mocha:
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);
});});