मैं पैकेज में आवश्यक Node.js संस्करण कैसे निर्दिष्ट कर सकता हूं।


261

मेरे पास एक Node.js परियोजना है जिसे नोड संस्करण 12 या उच्चतर की आवश्यकता है। क्या पैकेज.जोन फ़ाइल में इसे निर्दिष्ट करने का कोई तरीका है, ताकि इंस्टॉलर स्वचालित रूप से उपयोगकर्ताओं को जाँच कर सके और उन्हें सूचित कर सके कि क्या उन्हें अपग्रेड करने की आवश्यकता है?


1
एडम की प्रतिक्रिया के लिए एक समान तरीका, नोड का उपयोग करना भी। विस्तार: stackoverflow.com/a/48691987/3032209
येरे कुकिल्का


यहां पहले से ही प्रश्न पूछा गया था: उपयोग करने के लिए एक विशिष्ट नोड.जेएस संस्करण को कैसे लागू किया जाए?
cilap

मुझे आश्चर्य है कि अगर कोई उपकरण है जो स्वचालित रूप से एपीआई के उपयोग का निरीक्षण करके इस क्षेत्र को उचित मूल्य पर सेट कर सकता है।
geekley

जवाबों:


287

मुझे लगता है कि आप "इंजन" फ़ील्ड का उपयोग कर सकते हैं:

{ "engines" : { "node" : ">=0.12" } }

जैसा कि आप कह रहे हैं कि आपका कोड निश्चित रूप से किसी भी निम्न संस्करण के साथ काम नहीं करेगा, आप शायद "engineStrict" ध्वज भी चाहते हैं:

{ "engineStrict" : true }

Package.json फ़ाइल के लिए दस्तावेज़ npmjs साइट पर पाया जा सकता है

अपडेट करें

engineStrictअब पदावनत कर दिया गया है, इसलिए यह केवल एक चेतावनी देगा। npm config set engine-strict trueयदि वे ऐसा चाहते हैं, तो इसे चलाने के लिए अब उपयोगकर्ता के लिए नीचे है ।

अपडेट २

जैसा कि नीचे बताया गया है, .npmrcपाठ के साथ आपकी परियोजना की जड़ में एक फ़ाइल (उसी स्तर पर आपके पैकेज के रूप में। फ़ाइल के साथ) बनाना, engine-strict=trueस्थापना के दौरान एक त्रुटि को मजबूर करेगा यदि नोड संस्करण संगत नहीं है।


13
github.com/npm/npm/blob/master/CHANGELOG.md#enginestrict "शायद ही कभी इस्तेमाल किया गया पैकेज ।json विकल्प कई महीनों के लिए पदावनतengineStrict कर दिया गया है , जब इसका उपयोग किया गया था तब चेतावनी उत्पन्न करना। npm @ 3 से शुरू होकर, मान। फ़ील्ड को नजरअंदाज कर दिया जाता है, और इंजन उल्लंघन केवल चेतावनी उत्पन्न करेगा। यदि आप, एक उपयोगकर्ता के रूप में, सख्त इंजन क्षेत्र प्रवर्तन चाहते हैं, तो बस एनपीएम कॉन्फ़िगर सेट इंजन-सख्त सच चलाएं "
माइक स्टैड

1
cd .. && npm i <folder-name>परियोजना के लिए जाँच करने के लिए याद रखें । हालाँकि, यह स्वयं में एक संपूर्ण निर्माण को ट्रिगर करेगा।
mlunoe

6
क्यों पृथ्वी पर उन्होंने
वंचित किया है

15
जोड़ा जा रहा है engine-strict=trueअब अपनी .npmrc के लिए एक ही प्रभाव पड़ता है
बेन

4
@ परफेक्ट, धन्यवाद! और यह प्रतिबद्ध किया जा सकता है ताकि इंजन संस्करण आवश्यकताओं का पालन करने के लिए कम से कम आपकी पूरी टीम की आवश्यकता हो।
जोशुआ पिन्टर

114

जोड़ना

सेवा package.json

  "engines": {
    "node": ">=10.0.0",
    "npm": ">=6.0.0"
  },

फ़ाइल .npmrc(पास package.json, उसी निर्देशिका के लिए)

engine-strict=true

3
यह सबसे आसान समाधान है जो अंत उपयोगकर्ता को चलाने के दौरान नोड के सही संस्करण नहीं होने के बारे में एक अच्छा वसा त्रुटि देता है npm install; साथ yarnही काम करता है
jcollum

इसका कोई असर नहीं दिख रहा है। मैंने package.jsonअपना "इंजन" खंड ऊपर ( 11.13.0और 6.7.0) के समान स्थापित किया है , और .npmrcऊपर निर्दिष्ट सामग्री के साथ कुछ भी नहीं है। मेरे पास एक पुराने नोड संस्करण में nvm स्विच था, फिर भाग गया npm install, लेकिन यह सिर्फ निर्भरता को स्थापित करता है और इंजन संस्करण बेमेल का भी उल्लेख नहीं करता है।
एड्रियन

54

इबाम की तरह ही, 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

एक और बात। विशिष्ट नोड संस्करण की आवश्यकता के लिए एक dotfile '.nvmrc' का उपयोग किया जा सकता है - https://github.com/creationix/nvm#nvmrc

लेकिन, यह केवल npm स्क्रिप्ट (और यार्न स्क्रिप्ट) द्वारा सम्मानित किया गया है।


2
यह 2019 में सबसे अच्छा जवाब है, सेट इंजन के अपव्यय के प्रकाश में और वास्तविकता है कि कई (संभावना) एनवीएम के साथ संस्करणों को स्विच करने के कारण इसका सामना कर रहे हैं।
शिल्प

14

.nvmrc

यदि आप इस तरह से NVM का उपयोग कर रहे हैं , जिसकी आपको संभावना है, तो आप दिए गए प्रोजेक्ट के लिए आवश्यक नोड्स संस्करण को एक ट्रैक-ट्रैक .nvmrcफ़ाइल में इंगित कर सकते हैं :

echo v10.15.1 > .nvmrc

यह स्वचालित रूप से प्रभावी नहीं होता है cd, जो समझदार है: उपयोगकर्ता को तब a करना चाहिए:

nvm use

और अब नोड का संस्करण वर्तमान शेल के लिए उपयोग किया जाएगा।

आप अपने पास मौजूद नोड के संस्करणों को सूचीबद्ध कर सकते हैं:

nvm list

.nvmrcपर प्रलेखित है: https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072cc22603#nvmrc

स्वचालित रूप से उस नोड संस्करण का चयन कैसे करें जिस पर cdपूछा गया था: स्वचालित रूप से प्रोजेक्ट के आधार पर नोड के सही संस्करण पर स्विच करें

NVM 0.33.11 के साथ परीक्षण किया गया।


8

ऐसा करने का एक और सरल तरीका है:

  1. npm install Node@8 (पैकेज में निर्भरता के रूप में नोड 8 बचाता है। आगजनी)
  2. आपका ऐप किसी के लिए भी नोड 8 का उपयोग करके चलेगा - यहां तक ​​कि यार्न उपयोगकर्ता भी!

यह काम करता है क्योंकि nodeसिर्फ एक पैकेज है जो अपने पैकेज को बाइनरी के रूप में नोड करता है। इसमें सिर्फ नोड_मॉडल / .बीन शामिल है, जिसका अर्थ है कि यह केवल नोड को पैकेज स्क्रिप्ट के लिए उपलब्ध करता है। मुख्य खोल नहीं।

ट्विटर पर चर्चा यहाँ देखें: https://twitter.com/housecor/status/962347301456015360


5
मैं असहमत हूं, यह संभावित रूप से इस मुद्दे को छिपाएगा और नोड के एक अलग संस्करण को साइडलोड करेगा यदि इसे स्थापित नहीं किया गया था।
ब्रेंडन हैनीमैन

7
-1 क्योंकि यह भयानक (वास्तव में भयानक) विचार है। यह कहने जैसा है कि अगर आप बेरोजगार हैं तो आपको पहले किसी कंपनी को फंड देना चाहिए और आप वहां काम करना शुरू कर सकते हैं।
ओज़नम्यूज़

2
मुझे एक महान विचार की तरह प्रतीत होता है। अलग परियोजनाओं के लिए अलग नोड संस्करण। दूसरों को अपग्रेड किए बिना सुरक्षित रूप से अपग्रेड कर सकते हैं। केवल पकड़ने के लिए केवल के ./node node-sassबजाय .bin में भागना है node-sass। यकीन नहीं तो सभी .bin फ़ाइलों के लिए समान है।
जॉन

2
यह एक सरल और सुरुचिपूर्ण समाधान है - जब तक कि उत्पाद पर काम कर रहे टीम के सदस्यों को पता है कि यह हो रहा है, मुझे लगता है कि यह एक महान जवाब है। हम एक दर्जन वेब फ्रंट-एंड उत्पादों के लिए नोड संस्करणों की विविधता से निपटने के लिए एक बड़ी कंपनी में इस तकनीक का उपयोग कर रहे हैं। उत्पादों के बीच आगे और पीछे जाने पर एनवीएम के साथ निरंतर स्विचिंग की आवश्यकता को हटाता है।
नाथन बेडफोर्ड

2
इस समाधान के अपने पेशेवरों और विपक्ष हैं। नोड संस्करण एनकैप्सुलेशन संभवतः इसका सबसे बड़ा समर्थक है। अगर आप इसे इस तरह से तैनात करने जा रहे हैं तो नकारात्मक पहलू यह है कि डॉक इमेज का आकार छोटा है।
ivosh 17

0

मोचा टेस्ट केस का उदाहरण:

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);
    });});

1
एक यूनिट टेस्ट नहीं होना चाहिए, पैकेज का उपयोग करें। Json / dotfiles
bgcode

2
लेकिन यह कैसे एक इकाई परीक्षण के लिए तैयार किया गया है? -
जेमी निकोल-शेली

क्योंकि आपको यूनिट टेस्ट चलाने के लिए नोड की आवश्यकता होती है। यदि मौजूद नोड संस्करण बहुत पुराना है, तो परीक्षण बस नहीं चलेंगे या वे सिंटैक्स त्रुटि या एसएमएस के साथ विफल हो जाएंगे। समान, जो इकाई परीक्षण के बिंदु को पराजित करता है। यह एक प्राधिकरण फॉर्म के पीछे एक पासवर्ड रीसेट फॉर्म को छिपाने की तरह है। यदि आपको पासवर्ड याद नहीं है, तो आपको रीसेट पासवर्ड फ़ंक्शन का उपयोग करने की आवश्यकता है, लेकिन अब आप इसका उपयोग नहीं कर सकते, क्योंकि आपको पासवर्ड याद नहीं है।
अंखजीत
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.