Düğüm sürüm 12 veya üstünü gerektiren bir Node.js projem var. Bunu instal.json dosyasında belirtmenin bir yolu var, böylece yükleyici kullanıcıları yükseltmeleri gerekip gerekmediğini otomatik olarak kontrol edecek ve bilgilendirecektir?
Düğüm sürüm 12 veya üstünü gerektiren bir Node.js projem var. Bunu instal.json dosyasında belirtmenin bir yolu var, böylece yükleyici kullanıcıları yükseltmeleri gerekip gerekmediğini otomatik olarak kontrol edecek ve bilgilendirecektir?
Yanıtlar:
"Motorlar" alanını kullanabileceğinizi düşünüyorum:
{ "engines" : { "node" : ">=0.12" } }
Kodunuzun kesinlikle daha düşük sürümlerle çalışmadığını söylediğiniz için, muhtemelen "engineStrict" bayrağını da istersiniz:
{ "engineStrict" : true }
Package.json dosyasının belgeleri bulunabilir Package.json npmjs sitesinde bulunabilir
Güncelleme
engineStrict
artık kullanımdan kaldırılmıştır, bu nedenle bu yalnızca bir uyarı verir. Bunu npm config set engine-strict true
isterse şimdi çalıştırmak kullanıcıya kalmıştır .
Güncelleme 2
Aşağıda belirtildiği gibi, .npmrc
projenizin kökünde (package.json dosyanızla aynı düzeyde) metin içeren bir dosya oluşturmak engine-strict=true
, Düğüm sürümü uyumlu değilse yükleme sırasında bir hatayı zorlar.
engineStrict
olmuştur kaldırılmış kullanıldığı zaman uyarıları üreten, birkaç ay boyunca. NPM başlayarak @ 3, değerini alan göz ardı edilir ve motor ihlalleri sadece uyarılar üretecek Eğer bir kullanıcı olarak, isterseniz sıkı motorlar saha uygulama, sadece koşmak npm yapılandırma grup motor-katı gerçek".
cd .. && npm i <folder-name>
Projenin kendisini kontrol etmek için unutmayın . Ancak bu, kendi içinde bütün bir yapıyı tetikleyecektir.
engine-strict=true
.Npmrc'nize eklemek artık aynı etkiye sahip
Ekle
için package.json
"engines": {
"node": ">=10.0.0",
"npm": ">=6.0.0"
},
dosyaya .npmrc
( package.json
aynı dizine yakın )
engine-strict=true
npm install
; ile yarn
de çalışır
package.json
Yukarıdakine ( 11.13.0
ve 6.7.0
) benzer bir "motorlar" bölümü ve yukarıda .npmrc
belirtilen içerikten başka bir şey olmadan ayarladım . Ben nvm beni eski bir düğüm sürümüne geçmek vardı, sonra koştu npm install
, ama sadece bağımlılıkları yükler ve hatta motor sürümü uyumsuzluk bahsetmiyor.
Tıpkı söylediği gibi Ibam engineStrict
artık kullanımdan kaldırıldı. Ama bu çözümü buldum:
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"
}
}
Daha fazla bilgiyi buradan edinebilirsiniz: https://medium.com/@adambisek/how-to-check-minimum-required-node-js-version-4a78a8855a0f#.3oslqmig4
.nvmrc
Ve bir şey daha. Nokta düğümü '.nvmrc' belirli düğüm sürümü gerektirmek için kullanılabilir - https://github.com/creationix/nvm#nvmrc
Ancak, yalnızca npm betikleri (ve iplik betikleri) tarafından saygı gösterilir.
.nvmrc
Eğer varsa böyle NVM kullanarak , büyük olasılıkla, o zaman bir git izlenen verilen proje için gerekli nodejs versiyonunu gösterebilir hangi .nvmrc
dosyanın:
echo v10.15.1 > .nvmrc
Bu otomatik olarak cd
etkinleşmez, bu da aklı başındadır: kullanıcı daha sonra şunları yapmalıdır:
nvm use
ve şimdi düğümün o sürümü geçerli kabuk için kullanılacak.
Sahip olduğunuz düğüm sürümlerini aşağıdakilerle listeleyebilirsiniz:
nvm list
.nvmrc
şu adreste belgelenmiştir: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
Bu düğüm sürümünün otomatik olarak nasıl seçileceği cd
soruldu: Projeye göre Düğümün otomatik olarak doğru sürümüne otomatik olarak geç
NVM 0.33.11 ile test edilmiştir.
Bunu yapmanın başka, daha basit bir yolu var:
npm install Node@8
(Düğüm 8'i package.json içinde bağımlılık olarak kaydeder)Bu işe yarar çünkü node
sadece paketi ikili olarak düğüm gönderen bir pakettir. Yalnızca node_module / .bin olarak içerir, bu da sadece komut dosyalarını paketlemek için düğümü kullanılabilir kıldığı anlamına gelir. Ana kabuk değil.
Twitter'daki tartışmaya buradan bakın: https://twitter.com/housecor/status/962347301456015360
./node node-sass
sadece .bin içinde çalıştırmak zorunda node-sass
. Tüm .bin dosyaları için aynı olup olmadığından emin değilim.
Mocha test örneği:
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);
});});