Npx और npm के बीच अंतर?


516

मैंने अभी रिएक्ट सीखना शुरू किया है, और फेसबुक निम्नलिखित तैयार-किए गए प्रोजेक्ट प्रदान करके प्रारंभिक सेटअप को सरल बनाने में मदद करता है ।

अगर मुझे कंकाल परियोजना स्थापित करनी है तो मुझे npx create-react-app my-appकमांड-लाइन में टाइप करना होगा ।

मैं सोच रहा था कि जीथब में फेसबुक के npx create-react-app my-appबजाय क्यों है npm create-react-app my-app?


23
create-react-appएक जनरेटर है। इंटरनेट परnpx जाता है , पैकेज को अस्थायी रूप से डाउनलोड करना ताकि वह इसे निष्पादित कर सके ( np x )। आपको जो मिलता है (और चाहते हैं) आउटपुट है, जो स्थानीय रूप से सहेजा जाता है, जहां आपने कमांड चलाया था।
vsync

जवाबों:


642

पेश है npx: एक npm पैकेज धावक

NPM- प्रबंध संकुल लेकिन जीवन आसान नहीं है को क्रियान्वित करने के लिए किसी भी।
NPX- नोड पैकेज निष्पादित करने के लिए एक उपकरण ।

NPXNPMसंस्करण के साथ बंडल आता है5.2+

NPMद्वारा ही किसी भी पैकेज को नहीं चलाया जाता है। यह तथ्य के मामले में किसी भी पैकेज को नहीं चलाता है। यदि आप NPM का उपयोग करके एक पैकेज चलाना चाहते हैं, तो आपको अपनी package.jsonफ़ाइल में उस पैकेज को निर्दिष्ट करना होगा ।

जब निष्पादनयोग्य एनपीएम पैकेज के माध्यम से स्थापित होते हैं, तो एनपीएम उन्हें लिंक करता है:

  1. स्थानीय इंस्टॉल में ./node_modules/.bin/निर्देशिका में "लिंक" बनाए गए हैं।
  2. वैश्विक इंस्टॉल में लिनक्स या विंडोज पर वैश्विक bin/निर्देशिका (जैसे /usr/local/bin) से निर्मित "लिंक" हैं %AppData%/npm

प्रलेखन आपको पढ़ना चाहिए


NPM:

एक निश्चित परियोजना पर स्थानीय रूप से एक पैकेज स्थापित कर सकता है:

npm install some-package

अब मान लें कि आप चाहते हैं कि NodeJS कमांड लाइन से उस पैकेज को निष्पादित करें:

$ some-package

ऊपर वाला फेल हो जाएगा । केवल विश्व स्तर पर स्थापित पैकेजों को केवल अपना नाम लिखकर निष्पादित किया जा सकता है ।

इसे ठीक करने के लिए, और इसे चलाने के लिए, आपको स्थानीय रास्ता टाइप करना होगा:

$ ./node_modules/.bin/some-package

आप अपनी packages.jsonफ़ाइल को संपादित करके और scriptsअनुभाग में उस पैकेज को जोड़कर स्थानीय रूप से स्थापित पैकेज को तकनीकी रूप से चला सकते हैं :

{
  "name": "whatever",
  "version": "1.0.0",
  "scripts": {
    "some-package": "some-package"
  }
}

फिर स्क्रिप्ट का उपयोग करके चलाएं npm run-script(या npm run):

npm run some-package

NPX:

npxजाँच करेगा कि क्या <command>मौजूद है $PATH, या स्थानीय प्रोजेक्ट बायनेरिज़ में, और इसे निष्पादित करें। इसलिए, उपरोक्त उदाहरण के लिए, यदि आप स्थानीय स्तर पर स्थापित पैकेज को निष्पादित करना चाहते हैं, तो आपको some-packageटाइप करना होगा:

npx some-package

एक अन्य प्रमुख लाभ npxएक पैकेज को निष्पादित करने की क्षमता है जो पहले स्थापित नहीं था:

$ npx create-react-app my-app

उपरोक्त उदाहरण , कमांड द्वारा चलाए गए पथ के भीतर एक reactऐप बॉयलरप्लेट उत्पन्न करेगा , और यह सुनिश्चित करता है कि आप हमेशा जनरेटर या बिल्ड टूल के नवीनतम संस्करण का उपयोग किए बिना हर बार अपग्रेड करने के लिए उपयोग किए बिना।


संबंधित सवाल:

  1. नोड_मॉड्यूल्स में स्थानीय रूप से स्थापित पैकेज का उपयोग कैसे करें?
  2. एनपीएम: कैसे स्रोत ./ode_modules/.bin फ़ोल्डर?
  3. Npm स्क्रिप्ट का उपयोग करके आप js फ़ाइल कैसे चलाते हैं?

2
तो प्रतिक्रिया का उपयोग नहीं करते node.js, है ना? यह 'एनपीएम' (नोड पैकेज मैनेजर) के माध्यम से क्यों उपलब्ध है?
विंकलेर्र

3
कुछ साल पहले, फ्रंटएंड पैकेज प्रबंधन के लिए बोवर था , लेकिन यह npm के पक्ष में काफी गिर गया है। कुछ कारणों के बीच, आप केवल जावास्क्रिप्ट से संबंधित हर चीज के लिए एक एकल पैकेज प्रबंधक का उपयोग कर सकते हैं, और आप फ्रंटेज परियोजनाओं को विकसित करने के लिए सामान्य रिज़ॉल्यूशन का उपयोग कर सकते हैं। आप आगे की जानकारी के लिए इस प्रतिक्रिया की जांच कर सकते हैं । प्रतिक्रिया के बारे में: नहीं, यह सीधे नोड का उपयोग नहीं करता है, हालांकि आप इसे नोड में भी उपयोग कर सकते हैं! (जैसे: सर्वर साइड रेंडरिंग)
RecuencoJones

1
@RecuencoJones - आपने OP
vsync

1
हां, मैं @winklerrr का उल्लेख करना भूल गया, मैं उनकी टिप्पणी को संबोधित कर रहा था
RecuencoJones

1
मुझे लगता है कि सबसे उपयोगी विशेषता एनपीएक्स पैकेज को स्थापित करना है जब यह अभी तक स्थापित नहीं किया गया है। अन्यथा ./node_modules/.binअपने $ PATH और NPX में जोड़ने की जरूरत नहीं है।
रॉन ई

78

npx एक npm पैकेज धावक है (x शायद eXecute के लिए खड़ा है)। विशिष्ट उपयोग अस्थायी रूप से या परीक्षण के लिए एक पैकेज को डाउनलोड करने और चलाने के लिए है।

create-react-app एक एनपीएम पैकेज है जो किसी प्रोजेक्ट के जीवनचक्र में केवल एक बार चलने की उम्मीद है। इसलिए, इसे एक ही चरण में स्थापित करने और चलाने के लिए npx का उपयोग करना पसंद किया जाता है।

जैसा कि मैन पेज https://www.npmjs.com/package/npx , npx में बताया गया है डिफ़ॉल्ट रूप से PATH में या node_modules / .bin से कमांड चला सकता है।

नोट: कुछ खुदाई के साथ, हम पा सकते हैं कि जावास्क्रिप्ट-फ़ाइल (संभवतः /usr/lib/node_modules/create-react-app/index.js पर लिनक्स सिस्टम पर नोड-एन्वायर्नमेंट के भीतर निष्पादित होने वाले एक-प्रतिक्रिया-एप्लिकेशन-पॉइंट्स। । यह केवल एक वैश्विक उपकरण है जो कुछ जांच करता है। वास्तविक सेटअप प्रतिक्रिया-लिपियों द्वारा किया जाता है, जिसका नवीनतम संस्करण परियोजना में स्थापित किया गया है। अधिक जानकारी के लिए https://github.com/facebook/create-react-app देखें ।


2
विशिष्ट उपयोग केवल स्थानीय रूप से या विश्व स्तर पर पहले से इंस्टॉल किए गए संस्करण को चलाने के लिए है क्योंकि यह एक पैकेज को डाउनलोड करने और चलाने के लिए है।

69

एनपीएम एक पैकेज मैनेजर है, आप एनपीएम का उपयोग करके नोड.जेएस पैकेज स्थापित कर सकते हैं

NPX नोड.जेएस पैकेज को निष्पादित करने का एक उपकरण है।

इससे कोई फर्क नहीं पड़ता कि आपने वैश्विक या स्थानीय स्तर पर उस पैकेज को स्थापित किया है या नहीं। एनपीएक्स अस्थायी रूप से इसे स्थापित करेगा और इसे चलाएगा। यदि आप पैकेज.जॉन फ़ाइल को कॉन्फ़िगर करते हैं और इसे स्क्रिप्ट सेक्शन में शामिल करते हैं तो एनपीएम पैकेज भी चला सकता है।

तो यह याद रखें, यदि आप स्थानीय स्तर पर या विश्व स्तर पर उपयोग किए बिना एनपीएक्स को जल्दी से नोड पैकेज की जांच / चलाना चाहते हैं।

एनपी एम - प्रबंधक

एनपी एक्स - निष्पादित - याद रखने में आसान


लघु और स्पष्ट व्याख्या
बारिस सेरिन

मैं जितने लम्बे ब्लॉगों से गुज़रा उससे बेहतर।
मोहन गुंडलपल्ली

क्या आप "अस्थायी रूप से" पर थोड़ा विस्तार कर सकते हैं। क्या आपको लगता है कि कमांड को निष्पादित करने के बाद बायनेरिज़ को फेंक दिया गया है, हर बार बायनेरिज़ को फिर से डाउनलोड करने के लिए npx को मजबूर किया जाता है?
जिम आहो

49

NPX:

से https://www.futurehosting.com/blog/npx-makes-life-easier-for-node-developers-plus-node-vulnerability-news/ :

वेब डेवलपर्स के पास अपने विकास मशीनों पर दर्जनों परियोजनाएं हो सकती हैं, और प्रत्येक परियोजना के पास npm स्थापित निर्भरता का अपना विशेष सेट है। कुछ साल पहले, ग्रंट या गुल्प जैसे सीएलआई अनुप्रयोगों से निपटने की सामान्य सलाह उन्हें प्रत्येक परियोजना में स्थानीय स्तर पर और वैश्विक स्तर पर स्थापित करने की थी ताकि उन्हें आसानी से कमांड लाइन से चलाया जा सके।

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

उपकरणों के स्थानीय संस्करण डेवलपर्स को उपकरण के वैश्विक रूप से स्थापित संस्करणों के साथ असंगति के बारे में चिंता किए बिना गिटहब से परियोजनाओं को खींचने की अनुमति देते हैं। एनपीएम केवल स्थानीय संस्करण स्थापित कर सकता है और आप जाने के लिए अच्छे हैं। लेकिन प्रोजेक्ट विशिष्ट इंस्टॉलेशन उनकी समस्याओं के बिना नहीं हैं: आप टूल के सही संस्करण को प्रोजेक्ट में उसके सही स्थान को निर्दिष्ट किए बिना या एलियास के साथ खेलने के बिना कैसे चलाते हैं?

यही समस्या है npx हल। NPM 5.2 में शामिल एक नया टूल, npx एक छोटी सी उपयोगिता है जो एक प्रोजेक्ट के भीतर से कॉल करने पर सही एप्लिकेशन को चलाने के लिए पर्याप्त स्मार्ट है।

यदि आप mocha के प्रोजेक्ट-स्थानीय संस्करण को चलाना चाहते हैं, उदाहरण के लिए, आप प्रोजेक्ट के अंदर npx mocha चला सकते हैं और यह वही करेगा जो आप अपेक्षा करते हैं।

Npx का एक उपयोगी लाभ यह है कि यह npm संकुल को स्वतः स्थापित करेगा जो पहले से स्थापित नहीं है। इसलिए, जैसा कि उपकरण के निर्माता कैट मार्चैन बताते हैं, आप वैश्विक वातावरण को प्रदूषित करने वाले बेनी हिल से निपटने के लिए npx बेनी-हिल चला सकते हैं।

यदि आप स्पिन के लिए npx लेना चाहते हैं, तो npm के सबसे हाल के संस्करण में अपडेट करें।


यदि आप nvm-windows का उपयोग कर रहे हैं तो आपको npm के साथ npx नहीं मिलेगा, लेकिन इसे मैन्युअल रूप से इंस्टॉल करने की आवश्यकता है! npm i -g npx
नील

1
NPM can just install local versions- गलत। npmवैश्विक स्थापित कर सकते हैं और यह एक आम बात है।
vsync

1
NPX का एक बेहतरीन परिचय यहां पाया जा सकता है: medium.com/@maybekatz/... , कैट Marchan द्वारा।
जेफ हू

1
@vsync मेरा मानना ​​है कि इसे "एनपीएम केवल स्थानीय संस्करण स्थापित कर सकता है और आपको जाने के लिए अच्छा है।" एक सीमा को लागू करने के बजाय।
यिपिप

37

npx स्पष्ट रूप से स्थापित किए बिना पैकेज की एक कमांड चलाता है।

बक्सों का इस्तेमाल करें:

  • आप न तो वैश्विक स्तर पर और न ही स्थानीय स्तर पर पैकेज स्थापित करना चाहते हैं।
  • आपके पास इसे विश्व स्तर पर स्थापित करने की अनुमति नहीं है।
  • बस कुछ कमांड का परीक्षण करना चाहते हैं।

वाक्य - विन्यास:

npx [options] [-p|--package <package>] <command> [command-arg]...

पैकेज वैकल्पिक है:

npx   -p uglify-js         uglifyjs --output app.min.js app.js common.js
      +----------------+   +--------------------------------------------+
      package (optional)   command, followed by arguments

उदाहरण के लिए:

Start a HTTP Server      : npx http-server
Lint code                : npx eslint ./src
                         # Run uglifyjs command in the package uglify-js
Minify JS                : npx -p uglify-js uglifyjs -o app.min.js app.js common.js
Minify CSS               : npx clean-css-cli -o style.min.css css/bootstrap.css style.css
Minify HTML              : npx html-minifier index-2.html -o index.html --remove-comments --collapse-whitespace
Scan for open ports      : npx evilscan 192.168.1.10 --port=10-9999
Cast video to Chromecast : npx castnow http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4

के बारे में अधिक command:


18

सरल परिभाषा:

npm - जावास्क्रिप्ट पैकेज मैनेजर

npx - npm पैकेज बायनेरिज़ निष्पादित करें


7

यहाँ NPX एक्शन का एक उदाहरण है: npx cowsay hello

यदि आप अपने बैश टर्मिनल में टाइप करते हैं तो आपको परिणाम दिखाई देगा। इसका लाभ यह है कि npx ने अस्थायी रूप से गौशाला स्थापित की है। कोई पैकेज प्रदूषण नहीं है क्योंकि गायों को स्थायी रूप से स्थापित नहीं किया जाता है। यह एक बंद पैकेज के लिए बहुत अच्छा है जहाँ आप पैकेज प्रदूषण से बचना चाहते हैं।

जैसा कि अन्य उत्तरों में बताया गया है, npx उन मामलों में भी बहुत उपयोगी है जहाँ (npm के साथ) पैकेज को स्थापित करने की आवश्यकता होती है, फिर चलने से पहले कॉन्फ़िगर किया गया। उदाहरण के लिए npm का उपयोग करने के बजाय स्थापित करें और फिर json.package फ़ाइल को कॉन्फ़िगर करें और फिर कॉन्फ़िगर किए गए रन कमांड को कॉल करें बस इसके बजाय npx का उपयोग करें। एक वास्तविक उदाहरण: npx create-react-app my-app


3
यह इसे कहां स्थापित करता है, और क्या यह कमांड खत्म होने के बाद इसे हटा देता है, या क्या यह इसे कुछ समय के लिए कैश करता है, या हमेशा जांचें कि आपके पास पैकेज का सबसे हाल का संस्करण है?
redOctober13

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