Ho un progetto Node.js che richiede Node versione 12 o successiva. C'è un modo per specificarlo nel file packages.json, in modo che il programma di installazione controllerà e informerà automaticamente gli utenti se devono aggiornare?
Ho un progetto Node.js che richiede Node versione 12 o successiva. C'è un modo per specificarlo nel file packages.json, in modo che il programma di installazione controllerà e informerà automaticamente gli utenti se devono aggiornare?
Risposte:
Penso che tu possa usare il campo "motori":
{ "engines" : { "node" : ">=0.12" } }
Come stai dicendo che il tuo codice sicuramente non funzionerà con nessuna versione precedente, probabilmente vorrai anche il flag "engineStrict":
{ "engineStrict" : true }
La documentazione per il file package.json è disponibile sul sito npmjs
Aggiornare
engineStrict
è ora deprecato, quindi verrà visualizzato solo un avviso. Ora spetta all'utente eseguire npm config set engine-strict true
se lo desidera.
Aggiornamento 2
Come ben sottolineato di seguito, la creazione di un .npmrc
file nella radice del progetto (lo stesso livello del file package.json) con il testo engine-strict=true
forzerà un errore durante l'installazione se la versione del nodo non è compatibile.
engineStrict
è stata deprecata per diversi mesi, producendo avvisi quando è stata utilizzata. A partire da npm @ 3, il valore del valore il campo viene ignorato e le violazioni del motore genereranno solo avvisi. Se tu, come utente, desideri un'applicazione rigorosa del campo dei motori, esegui semplicemente npm config set engine-strict true "
cd .. && npm i <folder-name>
per verificare il progetto stesso. Tuttavia, questo attiverà un'intera build in se stesso.
engine-strict=true
al tuo .npmrc ora ha lo stesso effetto
Inserisci
per package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
al file .npmrc
(vicino a package.json
, stessa directory)
engine-strict=true
npm install
; funziona con yarn
così
package.json
con una sezione "motori" simile alla precedente ( 11.13.0
e 6.7.0
) e una .npmrc
con nient'altro che i contenuti specificati sopra. Ho dovuto passare a una versione del nodo precedente, quindi npm install
ho eseguito , ma installa solo le dipendenze e non menziona nemmeno la mancata corrispondenza della versione del motore.
Proprio come ha detto Ibam, engineStrict
ora è deprecato. Ma ho trovato questa soluzione:
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"
}
}
Scopri di più qui: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
E un'altra cosa. Un file dot '.nvmrc' può essere utilizzato per richiedere una specifica versione del nodo - https://github.com/creationix/nvm#nvmrc
Ma è rispettato solo dagli script npm (e dagli script di thread).
.nvmrc
Se stai usando NVM in questo modo , cosa che probabilmente dovresti, allora puoi indicare la versione di nodejs richiesta per un dato progetto in un file con traccia git .nvmrc
:
echo v10.15.1 > .nvmrc
Questo non ha effetto automaticamente su cd
, che è sano: l'utente deve quindi fare un:
nvm use
e ora quella versione del nodo verrà utilizzata per la shell corrente.
Puoi elencare le versioni del nodo che hai con:
nvm list
.nvmrc
è documentato su: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
È cd
stato chiesto come selezionare automaticamente la versione del nodo su : Passa automaticamente alla versione corretta del nodo in base al progetto
Testato con NVM 0.33.11.
C'è un altro modo più semplice per farlo:
npm install Node@8
(salva il nodo 8 come dipendenza in package.json)Questo funziona perché node
è solo un pacchetto che spedisce il nodo come binario del pacchetto. Include solo come node_module / .bin che significa che rende disponibile il nodo solo per gli script del pacchetto. Shell principale.
Vedi la discussione su Twitter qui: https://twitter.com/housecor/status/962347301456015360
./node node-sass
anziché solo node-sass
. Non sono sicuro che sia lo stesso per tutti i file .bin.
Un esempio di test case 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);
});});