एनपीएम का उपयोग करके एक स्थानीय मॉड्यूल स्थापित करना?


418

मेरे पास एक डाउनलोड मॉड्यूल रेपो है, मैं इसे स्थानीय रूप से स्थापित करना चाहता हूं, न कि किसी अन्य निर्देशिका में विश्व स्तर पर?

ऐसा करने का एक आसान तरीका क्या है?

जवाबों:


479

से NPM-लिंक प्रलेखन :

स्थानीय मॉड्यूल निर्देशिका में:

$ cd ./package-dir
$ npm link

मॉड्यूल का उपयोग करने के लिए परियोजना की निर्देशिका में:

$ cd ./project-dir
$ npm link package-name

या रिश्तेदार रास्तों का उपयोग करते हुए:

$ cd ./project-dir
$ npm link ../package-dir

यह हुड के नीचे दो आदेशों का उपयोग करने के बराबर है।


14
यह एकमात्र ऐसा दिखने वाला दृष्टिकोण है, जिसे मैंने अब तक देखा है - क्यों npm को इतना अस्पष्ट / अप्रिय होना चाहिए। स्थानीय पैकेज बनाने, इसे स्थापित करने और फिर इसका उपयोग करने के संबंध में, मुझे नहीं पता ... लिंक काम करता है, (और इसके महान), लेकिन शब्दावली बल्कि भ्रामक है।
smaudet

6
@Rich Apodaca, डॉक्टर लिंक के लिए धन्यवाद। यह प्रक्रिया को पूर्ववत करने का उल्लेख नहीं करता है। ऐसा लगता है कि यह सब करता है सहानुभूति पैदा करता है, इसलिए मैं उन लोगों को सामान्य रूप से हटा सकता हूं?
टायलर कोलियर

1
@TylerCollier npm अनलिंक दर्पण-छवि ऑपरेशन stackoverflow.com/a/24940024/54426
रिच अपोडका

1
बस एक नोट, अगर आप Angular2 (या शायद अन्य अनुप्रयोगों?) का उपयोग करते हैं, तो npm के आसपास कुछ चर्चा है जो विशिष्ट प्रकार के मुद्दे के मूल कारण को जोड़ता है। यहाँ और यहाँ
लाल मटर

4
हालांकि ध्यान रखें कि npm linkबाहरी निर्भरता का एक दूसरा उदाहरण पैदा करेगा। इसलिए यदि आपके पास एक पैकेज है A B और C की आवश्यकता है, B को C की आवश्यकता है। B को जोड़ने से A के C के दो उदाहरण होंगे
user2167582

421

आप केवल एक <folder>तर्क प्रदान करते हैं npm install, तर्क को पैकेज के नाम के बजाय स्थानीय फ़ोल्डर की ओर इंगित करना चाहिए:

npm install /path

5
लिंक के विपरीत, यह .npmignore का उपयोग करता है।
कैमिल विंट्ज़

30
@bithavoc कम से कम npm 5 के रूप में, अब एक फ़ोल्डर स्थापित करने से एक कॉपी बनती है, कि सिमिलिंक बनाता है। देखें docs.npmjs.com/cli/install
फ्रैंक टैन

3
मैंने इस तरह से उपयोग करने की कोशिश की, लेकिन मेरा मॉड्यूल इसे सहकर्मी निर्भरता नहीं पा सकता है।
विटालो बेनिकियो

1
उत्तर की स्क्रिप्ट चलाने से rm -rf node_modulesपहले और npm installबाद में यह अच्छा है ।
रेनाटो बैक

2
@FrankTan हाँ, लेकिन पुराने व्यवहार को कैसे प्राप्त करें? मैं चाहता हूँ की नकल!
माइकल

150

चूँकि उसी व्यक्ति द्वारा पूछा और उत्तर दिया गया था, इसलिए मैं एक विकल्प के रूप में एक npm लिंक जोड़ूँगा

डॉक्स से:

यह अपने स्वयं के सामान को स्थापित करने के लिए आसान है, ताकि आप इस पर काम कर सकें और लगातार पुन: निर्माण किए बिना इसे पुन: परीक्षण कर सकें।

cd ~/projects/node-bloggy  # go into the dir of your main project
npm link ../node-redis     # link the dir of your dependency

[संपादित करें] NPM 2.0 के रूप में, आप package.json में स्थानीय निर्भरता की घोषणा कर सकते हैं

"dependencies": {
    "bar": "file:../foo/bar"
  }

11
यह सवाल का मूल आशय नहीं हो सकता है, लेकिन यह शायद ज्यादातर लोग हैं जो इसे Google के माध्यम से चाहते हैं।
डस्टी जे

1
यह उत्तर अधूरा लगता है, आपको npm linkएक बार फ़ोल्डर के विरुद्ध (एक वैश्विक सिम्कलिन बनाने के लिए) चलाने की आवश्यकता है और फिर npm link package-nameप्रोजेक्ट के फ़ोल्डर में (अपनी परियोजना में वैश्विक सिम्लिंक का उपयोग करने के लिए ) चलाने की आवश्यकता है । नीचे दिया गया उत्तर सही उत्तर है।
थॉमस पोटायर

8
@ThomasPotaire दोनों उत्तर सही हैं। यदि आप npm लिंक प्रलेखन को देखते हैं, तो यह दोनों तरीकों को प्रस्तुत करता है, इस रिश्तेदार निर्देशिका दृष्टिकोण के साथ शॉर्टहैंड के रूप में।
एमजे

1
दूसरी विधि ( file:दृष्टिकोण का उपयोग करके ) ने मेरे ऐप और स्थानीय मॉड्यूल के लिए एक निर्भरता साझा करने की अनुमति दी। npm linkडुप्लिकेट निर्भरता के परिणामस्वरूप मेरा परीक्षण , जो चीजों को तोड़ता है अगर निर्भरता को एक सिंगलटन के रूप में उपयोग करने की आवश्यकता होती है।
डैनियल वालट्रिप

मेरे पास एक स्थानीय पैकेज था (पैकेज 1 कहते हैं), पैकेज 2 में पैकेज 1 के सापेक्ष पथ के साथ उल्लेखित एक निर्भरता है। npm मैं पैकेज स्थापित नहीं कर रहा हूं जब रिश्तेदार पथ "फ़ाइल: ../// पैकेज 1" से शुरू होता है, जब यह '' ..///package1 "होता है, तो भीख में फ़ाइल को जोड़ने का मतलब कुछ और होता है?
Dip686

15

npm pack + package.json

इसी से मेरा काम बना है:

चरण 1: में module project, निष्पादित करें npm pack:

यह एक निर्माण होगा <package-name>-<version>.tar.gz फ़ाइल का ।

चरण 2: फ़ाइल को इसमें स्थानांतरित करें consumer project

आदर्श रूप में आप ऐसी सभी फाइलों tmpको अपने consumer-projectरूट में एक फ़ोल्डर में रख सकते हैं :

चरण 3: इसे अपने में देखें package.json:

"dependencies": {
  "my-package": "file:/./tmp/my-package-1.3.3.tar.gz"
}

चरण 4: Installपैकेज:

npm installया npm iयाyarn

आपका पैकेज आपके consumer-project's node_modulesफ़ोल्डर में उपलब्ध होना चाहिए ।

शुभ लाभ...


9

यदि स्थानीय मॉड्यूल में सहकर्मी निर्भरता है जो आप केवल अपनी परियोजना के दायरे में स्थापित करना चाहते हैं, तो इनमें से कोई भी ( npm linkया package.jsonफ़ाइल निर्भरता) कार्य नहीं करता है।

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

/local/mymodule/package.json:
  "name": "mymodule",
  "peerDependencies":
  {
    "foo": "^2.5"
  }

/dev/myproject/package.json:
  "dependencies":
  {
    "mymodule": "file:/local/mymodule",
    "foo": "^2.5"
  }

इस परिदृश्य में, NPM सेट myproject's node_modules/इस तरह:

/dev/myproject/node_modules/
  foo/
  mymodule -> /local/mymodule

जब नोड लोड होता है mymoduleऔर यह होता है require('foo'), नोड सिम्लिंक को हल करता है mymodule, और उसके बाद केवल /local/mymodule/node_modules/(और उसके पूर्वजों) के लिए दिखता है foo, जो इसे नहीं मिला है। इसके बजाय, हम नोड को देखना चाहते हैं /local/myproject/node_modules/, क्योंकि यह हमारी परियोजना कहां से चल रही है, और कहां हैfoo स्थापित है।

इसलिए, हमें या तो नोड को यह बताने के लिए कि इस सीमलिंक को हल नहीं करना है foo, को खोजने के लिए एक तरीका चाहिए, या हमें फ़ाइल निर्भरता सिंटैक्स में उपयोग किए जाने पर कॉपी की स्थापना के लिए npm को बताने के लिए एक तरीके की आवश्यकता mymoduleहै package.json। मुझे ऐसा करने का कोई तरीका नहीं मिला, दुर्भाग्य से :(


मुझे एक वर्कअराउंड मिला, जो NODE_PATHकि node_modules/जहां fooस्थापित है , वहां इंगित करने के लिए सेट है । तो उपरोक्त मामले के लिए, यह यह होगा: NODE_PATH=/dev/myproject/node_modules/ जो mymoduleखोजने की अनुमति देता है foo
पॉल मेडिनस्की

के लिए एक समाधान है। प्रोजेक्ट रूट फ़ोल्डर में निर्भरता मॉड्यूल रखो । सामान्य रूप से 'फ़ाइल:' उपसर्ग के साथ package.json में अपनी निर्भरता को परिभाषित करें । क्या मैं NPM यह साथ ही इसकी निर्भरता के रूप में वे निर्भरता के अन्य प्रकार के लिए होगा उच्चस्तरीय node_modules को फहराया जा सकता है इस परियोजना के node_modules में एक सिमलिंक पैदा करेगा। मेरा npm संस्करण v6.14.4 है। इसे ठीक करने के बारे में कुछ घंटे बिताने के बाद, यह समाधान यहां पाया गया: ( atmos.washington.edu/~nbren12/reports/journal/… )। धन्यवाद nbren12
फरवरी

मुझे वही परेशानी हो रही थी। मुझे यह उत्तर मिला: stackoverflow.com/questions/50807329/… , यह सहकर्मी निर्भरता और स्थानीय पुस्तकालयों के साथ मेरी समस्या को हल करता है।
theawless

0

मुख्य संपत्ति गुम है?

जैसा कि पिछले लोगों ने उत्तर दिया है npm --save ../location-of-your-packages-root-directory../location-of-your-packages-root-directoryलेकिन आदेश में यह काम करने के लिए दो बातें होनी चाहिए।

1) package.jsonउस निर्देशिका में ओर इशारा किया

2) mainप्रॉपर्टी को package.jsonसेट किया जाना चाहिए और काम करना चाहिए "main": "src/index.js",यदि प्रविष्टि फ़ाइल ../location-of-your-packages-root-directoryहै../location-of-your-packages-root-directory/src/index.js

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.