Saya memiliki proyek Node.js yang memerlukan Node versi 12 atau lebih tinggi. Apakah ada cara untuk menentukan ini di file paket.json, sehingga installer akan secara otomatis memeriksa dan memberi tahu pengguna jika mereka perlu memutakhirkan?
Saya memiliki proyek Node.js yang memerlukan Node versi 12 atau lebih tinggi. Apakah ada cara untuk menentukan ini di file paket.json, sehingga installer akan secara otomatis memeriksa dan memberi tahu pengguna jika mereka perlu memutakhirkan?
Jawaban:
Saya pikir Anda dapat menggunakan bidang "mesin":
{ "engines" : { "node" : ">=0.12" } }
Seperti yang Anda katakan kode Anda pasti tidak akan berfungsi dengan versi yang lebih rendah, Anda mungkin ingin bendera "engineStrict" juga:
{ "engineStrict" : true }
Dokumentasi untuk file package.json dapat ditemukan di situs npmjs
Memperbarui
engineStrict
sudah tidak digunakan lagi, jadi ini hanya akan memberikan peringatan. Sekarang tergantung pada pengguna untuk menjalankan npm config set engine-strict true
jika mereka menginginkan ini.
Perbarui 2
Seperti yang ditunjukkan di bawah ini, membuat .npmrc
file di root proyek Anda (tingkat yang sama dengan file package.json Anda) dengan teks engine-strict=true
akan memaksa kesalahan selama instalasi jika versi Node tidak kompatibel.
engineStrict
telah ditinggalkan selama beberapa bulan, menghasilkan peringatan saat digunakan. Dimulai dengan npm @ 3, nilai dari lapangan diabaikan, dan pelanggaran mesin hanya akan menghasilkan peringatan. Jika Anda, sebagai pengguna, menginginkan penegakan hukum engine yang ketat, jalankan saja npm config atur engine-strict true "
cd .. && npm i <folder-name>
memeriksa proyek itu sendiri. Namun, ini akan memicu keseluruhan bangunan di dalamnya.
engine-strict=true
ke .npmrc Anda sekarang memiliki efek yang sama
Menambahkan
untuk package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
ke file .npmrc
(dekat dengan package.json
, direktori yang sama)
engine-strict=true
npm install
; bekerja dengan yarn
baik
package.json
dengan "mesin" yang mirip dengan yang di atas ( 11.13.0
dan 6.7.0
), dan .npmrc
dengan apa pun kecuali konten yang ditentukan di atas. Saya telah nvm beralih saya ke versi node yang lebih lama, kemudian berlari npm install
, tetapi hanya menginstal dependensi dan bahkan tidak menyebutkan ketidakcocokan versi mesin.
Sama seperti kata Ibam, engineStrict
sekarang sudah usang. Tetapi saya telah menemukan solusi ini:
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"
}
}
Cari tahu lebih lanjut di sini: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
Dan satu hal lagi. Dotfile '.nvmrc' dapat digunakan untuk membutuhkan versi node spesifik - https://github.com/creationix/nvm#nvmrc
Tapi, itu hanya dihormati oleh skrip npm (dan skrip benang).
.nvmrc
Jika Anda menggunakan NVM seperti ini , yang seharusnya Anda lakukan, maka Anda dapat menunjukkan versi nodejs yang diperlukan untuk proyek yang diberikan dalam .nvmrc
file yang dilacak git :
echo v10.15.1 > .nvmrc
Ini tidak berlaku secara otomatis cd
, yang waras: maka pengguna harus melakukan:
nvm use
dan sekarang versi node akan digunakan untuk shell saat ini.
Anda bisa mendaftar versi node yang Anda miliki dengan:
nvm list
.nvmrc
didokumentasikan di: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Cara otomatis memilih versi node pada cd
diminta di: Secara otomatis beralih ke versi Node yang benar berdasarkan proyek
Diuji dengan NVM 0.33.11.
Ada cara lain yang lebih sederhana untuk melakukan ini:
npm install Node@8
(menyimpan Node 8 sebagai dependensi dalam package.json)Ini berfungsi karena node
hanya paket yang mengirimkan simpul sebagai paket binernya. Itu hanya termasuk sebagai node_module / .bin yang berarti hanya membuat simpul tersedia untuk skrip paket. Bukan shell utama.
Lihat diskusi di Twitter di sini: https://twitter.com/housecor/status/962347301456015360
./node node-sass
bukan hanya node-sass
. Tidak yakin apakah sama untuk semua file .bin.
Contoh kasus uji 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);
});});