এনপিএম ব্যবহার করে একটি স্থানীয় মডিউল ইনস্টল করছেন?


417

আমার একটি ডাউনলোড মডিউল রেপো আছে, আমি স্থানীয়ভাবে এটি ইনস্টল করতে চাই, অন্য কোনও ডিরেক্টরিতে বিশ্বব্যাপী নয়?

এটি করার একটি সহজ উপায় কী?

উত্তর:


479

থেকে npm-লিঙ্ক ডকুমেন্টেশন :

স্থানীয় মডিউল ডিরেক্টরিতে:

$ cd ./package-dir
$ npm link

মডিউলটি ব্যবহার করতে প্রকল্পের ডিরেক্টরিতে:

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

অথবা একসাথে আপেক্ষিক পথ ব্যবহার করুন:

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

এটি হুডের নীচে দুটি কমান্ড ব্যবহার করার সমতুল্য।


14
আমি এখন পর্যন্ত দেখেছি এটিই একমাত্র বুদ্ধিমান দৃষ্টিভঙ্গি - কেন এনপিএমকে এত অস্পষ্ট / আবশ্যক হতে হবে। একটি স্থানীয় প্যাকেজ তৈরি করা, এটি ইনস্টল করা এবং তারপরে এটি ব্যবহার করার বিষয়ে, আমি জানি না ... লিঙ্কটি কাজ করে, (এবং এর দুর্দান্ত), তবে পরিভাষা বরং বিভ্রান্তিকর।
স্মুডেট

6
@ রিচ অ্যাপোডাকা, ডক লিঙ্কের জন্য ধন্যবাদ। এটি প্রক্রিয়াটিকে পূর্বাবস্থায় ফেলার উল্লেখ করে না। দেখে মনে হচ্ছে এটি যা কিছু করে তা সিমলিংক তৈরি করে, তাই আমি কি তাদেরকে সাধারণ হিসাবে সরাতে পারি?
টাইলার কলিয়ার

1
@TylerCollier npm লিঙ্কমুক্তের আয়না ইমেজ অপারেশন উপস্থিত হতে পারে stackoverflow.com/a/24940024/54426
রিচ Apodaca

1
কেবলমাত্র একটি নোট, যদি আপনি Angular2 (বা সম্ভবত অন্যান্য অ্যাপ্লিকেশন?) ব্যবহার করেন তবে এনপিএমের চারপাশে কিছুটা গুঞ্জন রয়েছে যা নির্দিষ্ট ধরণের সমস্যার মূল কারণ হিসাবে সংযুক্ত রয়েছে। এখানে এবং এখানে
দ্য রেড মটর 23

4
তবে মনে রাখবেন যে npm linkবাহ্যিক নির্ভরতার দ্বিতীয় উদাহরণ তৈরি করবে। সুতরাং আপনার যদি প্যাকেজ এ এবং বি এবং সি প্রয়োজন হয়, বি সি প্রয়োজন হয় লিঙ্ক বি এর ফলে অ্যাপ্লিকেশন এ দুটি সি এর দুটি দৃষ্টান্ত তৈরি করবে
ইউজার 2167582

421

আপনি কেবল একটি <folder>যুক্তি সরবরাহ করেন npm install, যুক্তিটি প্যাকেজের নামের পরিবর্তে স্থানীয় ফোল্ডারের দিকে নির্দেশ করা উচিত:

npm install /path

5
লিঙ্কের বিপরীতে, এটি .npmignore ব্যবহার করে।
ক্যামিল উইন্টজ

30
@ বিভাভোক কমপক্ষে এনপিএম 5 এর মধ্যে, এখন ফোল্ডার ইনস্টল করা একটি অনুলিপি নয় , একটি সিমলিংক তৈরি করে । Docs.npmjs.com/cli/install
ফ্র্যাঙ্ক ট্যান

3
আমি এইভাবে ব্যবহার করার চেষ্টা করেছি, তবে আমার মডিউলটি এটি পিয়ার-নির্ভরতা খুঁজে পাচ্ছে না।
উইটালো বেনিসিও

1
উত্তরের স্ক্রিপ্টটি চালানোর rm -rf node_modulesআগে এবং npm installপরে আপনার পক্ষে ভাল লাগল ।
রেনাটো পিছনে

2
@ ফ্র্যাঙ্কটান হ্যাঁ, তবে কীভাবে পুরানো আচরণ পাবেন? আমি চাই কপি!
মাইকেল

150

যেহেতু একই ব্যক্তির জিজ্ঞাসা করা হয়েছে এবং উত্তর দেওয়া হয়েছে, আমি একটি এনপিএম লিঙ্ক যুক্ত করব বিকল্প হিসাবে একটি ।

ডক্স থেকে:

এটি আপনার নিজের স্টাফ ইনস্টল করার জন্য সহজ, যাতে আপনি এটিতে কাজ করতে পারেন এবং ক্রমাগত পুনর্নির্মাণ না করে পুনরুক্তি পরীক্ষা করতে পারেন।

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

[সম্পাদনা] এনপিএম ২.০ হিসাবে, আপনি প্যাকেজ.জসনে স্থানীয় নির্ভরতা ঘোষণা করতে পারেন

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

11
এটি প্রশ্নের মূল অভিপ্রায় নাও হতে পারে তবে গুগলের মাধ্যমে এটি বেশিরভাগ লোকেরা এটি খুঁজে পেতে পারে।
ডাস্টি জে

1
এই উত্তরটি অসম্পূর্ণ বলে মনে হচ্ছে, আপনাকে npm linkএকবার ফোল্ডারটির বিরুদ্ধে চালানো দরকার (গ্লোবাল সিমলিংক তৈরি করতে) এবং তারপরে npm link package-nameপ্রকল্পের ফোল্ডারের মধ্যে চালানো উচিত (আপনার প্রকল্পে গ্লোবাল সিমলিংকটি ব্যবহার করতে)। নীচের উত্তরটি সঠিক উত্তর।
টমাস পোটায়ার

8
@ থমাসপোটায়ার উভয় উত্তর সঠিক। আপনি যদি এনএমপি লিংক ডকুমেন্টেশনের দিকে লক্ষ্য করেন তবে এটি উভয় পদ্ধতি উপস্থাপন করে, সংক্ষেপে এই সম্পর্কিত ডিরেক্টরি পদ্ধতির সাথে।
এমজে

1
দ্বিতীয় file:অ্যাপ্লিকেশন ( পদ্ধতির ব্যবহার করে ) আমার অ্যাপ্লিকেশন এবং স্থানীয় মডিউলকে নির্ভরতা ভাগ করার অনুমতি দিয়েছে allowed আমার পরীক্ষার npm linkফলে একটি সদৃশ নির্ভরতা হয়েছিল, যা নির্ভরতাটিকে সিঙ্গলটন হিসাবে ব্যবহার করার প্রয়োজন হলে জিনিসগুলি ভেঙে দেয়।
ড্যানিয়েল ওয়াল্ট্রিপ 30'17

আমার একটি স্থানীয় প্যাকেজ ছিল (বলুন প্যাকেজ 1), প্যাকেজ 2 এর প্যাকেজ 1 এর আপেক্ষিক পথের সাথে উল্লিখিত নির্ভরতা রয়েছে। এনপিএম আমি যখন "ফাইল: ../../ প্যাকেজ 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"
  }

এই দৃশ্যে, এনপিএম myprojectএর 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/fooNODE_PATH=/dev/myproject/node_modules/mymodulefoo
পল মেডিনস্কি

জন্য একটি সমাধান আছে। প্রকল্পের মূল ফোল্ডারে নির্ভরতা মডিউলগুলি রাখুন । সাধারণ 'ফাইল:' উপসর্গ সহ প্যাকেজ.জসনে আপনার নির্ভরতা নির্ধারণ করুন । কি আমি npm এই সেইসাথে তার নির্ভরতা হিসাবে তারা নির্ভরতা অন্যান্য ধরনের জন্য would toplevel node_modules করার উত্তোলন করা যেতে পারে প্রকল্পের node_modules একটি সিমবলিক লিঙ্ক তৈরি করবে। আমার এনপিএম সংস্করণটি v6.14.4। কীভাবে এটি ঠিক করার জন্য কয়েক ঘন্টা ব্যয় করার পরে, এই সমাধানটি এখানে পেয়ে গেল: ( atmos.washington.edu/~nbren12/report/j Journal/… )। ধন্যবাদ nbren12।
সাসবট

আমারও একই সমস্যা হচ্ছিল। আমি এই উত্তরটি পেয়েছি: স্ট্যাকওভারফ্লো / প্রশ্ন / 50807329/… , এটি পিয়ারের নির্ভরতা এবং স্থানীয় গ্রন্থাগারগুলির সাথে আমার সমস্যার সমাধান করে।
অজানা

0

মূল সম্পত্তি মিস করছেন?

পূর্ববর্তী লোকেরা যেমন উত্তর দিয়েছে npm --save ../location-of-your-packages-root-directory../location-of-your-packages-root-directoryতবে যাতে এটা কাজ করার জন্য দুটি জিনিস থাকতে হবে।

1) package.jsonযে ডিরেক্টরিতে নির্দেশিত

2) mainসম্পত্তি package.jsonসেট এবং করা আবশ্যক কাজ Ig "main": "src/index.js",যদি জন্য এন্ট্রি ফাইলে ../location-of-your-packages-root-directoryহয়../location-of-your-packages-root-directory/src/index.js

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.