Eu tenho um projeto Node.js que requer o Node versão 12 ou superior. Existe uma maneira de especificar isso no arquivo packages.json, para que o instalador verifique e informe automaticamente os usuários se eles precisam atualizar?
Eu tenho um projeto Node.js que requer o Node versão 12 ou superior. Existe uma maneira de especificar isso no arquivo packages.json, para que o instalador verifique e informe automaticamente os usuários se eles precisam atualizar?
Respostas:
Eu acho que você pode usar o campo "engines":
{ "engines" : { "node" : ">=0.12" } }
Como você está dizendo que seu código definitivamente não funcionará com versões inferiores, você provavelmente também desejará o sinalizador "engineStrict":
{ "engineStrict" : true }
A documentação para o arquivo package.json pode ser encontrada no site npmjs
Atualizar
engineStrict
agora está obsoleto, portanto, isso só dará um aviso. Agora cabe ao usuário executar, npm config set engine-strict true
se ele quiser.
Atualização 2
Como Ben apontou abaixo, a criação de um .npmrc
arquivo na raiz do seu projeto (o mesmo nível do arquivo package.json) com o texto engine-strict=true
forçará um erro durante a instalação se a versão do Nó não for compatível.
engineStrict
foi descontinuada por vários meses, produzindo avisos quando foi usada. Começando com npm @ 3, o valor do O campo é ignorado e as violações do mecanismo produzem apenas avisos. Se você, como usuário, deseja uma aplicação estrita do campo dos mecanismos, basta executar o npm config set engine-strict true "
cd .. && npm i <folder-name>
se de verificar o projeto em si. No entanto, isso desencadeará uma compilação completa em si mesmo.
engine-strict=true
ao seu .npmrc agora tem o mesmo efeito
Adicionar
para package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
para o arquivo .npmrc
(próximo ao package.json
mesmo diretório)
engine-strict=true
npm install
; trabalha com yarn
bem
package.json
com uma seção "mecanismos" semelhante à acima ( 11.13.0
e 6.7.0
), e uma .npmrc
com nada além do conteúdo especificado acima. Eu tinha o nvm me mudar para uma versão mais antiga do nó e, em seguida, executei npm install
, mas ele apenas instala as dependências e nem menciona a incompatibilidade de versão do mecanismo.
Assim como disse o Ibam, engineStrict
agora está obsoleto. Mas eu encontrei esta solução:
check-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"
}
}
Saiba mais aqui: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
E mais uma coisa. Um arquivo de ponto '.nvmrc' pode ser usado para exigir a versão específica do nó - https://github.com/creationix/nvm#nvmrc
Mas, isso é respeitado apenas pelos scripts npm (e scripts de fios).
.nvmrc
Se você estiver usando o NVM como este , o que provavelmente deveria, poderá indicar a versão do nodejs necessária para um determinado projeto em um .nvmrc
arquivo rastreado pelo git :
echo v10.15.1 > .nvmrc
Isso não entra em vigor automaticamente cd
, o que é sensato: o usuário deve fazer um:
nvm use
e agora essa versão do nó será usada para o shell atual.
Você pode listar as versões do nó que possui:
nvm list
.nvmrc
está documentado em: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Como selecionar automaticamente a versão do nó cd
foi solicitado em: Alternar automaticamente para a versão correta do nó com base no projeto
Testado com NVM 0.33.11.
Há outra maneira mais simples de fazer isso:
npm install Node@8
(salva o nó 8 como dependência no package.json)Isso funciona porque node
é apenas um pacote que envia o nó como seu binário de pacote. Ele inclui apenas como node_module / .bin, o que significa que apenas disponibiliza o nó para os scripts do pacote. Não é o shell principal.
Veja a discussão no Twitter aqui: https://twitter.com/housecor/status/962347301456015360
./node node-sass
vez de apenas node-sass
. Não tenho certeza se é o mesmo para todos os arquivos .bin.
Um exemplo de caso de teste 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);
});});