আমি কীভাবে নেস্টেড এনপিএম নির্ভরতা সংস্করণগুলিকে ওভাররাইড করব?


290

আমি grunt-contrib-jasmineএনপিএম প্যাকেজটি ব্যবহার করতে চাই । এটির বিভিন্ন নির্ভরতা রয়েছে। নির্ভরতা গ্রাফের অংশটি এরকম দেখাচ্ছে:

─┬ grunt-contrib-jasmine@0.4.1
  ├─┬ grunt-lib-phantomjs@0.2.0
   ├─┬ phantomjs@1.8.2-2

দুর্ভাগ্যক্রমে, এই সংস্করণে একটি ত্রুটি রয়েছে phantomjsযা এটি ম্যাক ওএস এক্সে সঠিকভাবে ইনস্টল করতে বাধা দেয়। এটি সর্বশেষতম সংস্করণে স্থির হয়েছে।

আমি কীভাবে এর grunt-lib-phantomjsনতুন সংস্করণটি ব্যবহার করতে পারি phantomjs?

কিছু অতিরিক্ত প্রসঙ্গ:


শুধু git cloneবা কাঁটাচামচ প্রয়োজনীয় মডিউল। আপনি phantomjsনিজে নেস্টেড অপসারণ করতে পারেন ।
আলেকসি জাব্রডস্কিই

3
grunt-contrib-jasmine০.০.১-এ রয়েছে, যা ব্যবহার করে grunt-lib-phantomjs@0.3.1, যা ব্যবহার করে phantomjs@1.9.1-0:)
গুস্তাভোহনেকে

উত্তর:


238

কোনও নির্ভরতা বা উপ-নির্ভরতা ওভাররাইড করার জন্য আপনি এনএমপি সঙ্কুচিত কার্যকারিতা ব্যবহার করতে পারেন ।

আমি সবেমাত্র আমাদের একটি ক্ষুধার্ত প্রকল্পে এটি করেছি। আমাদের ২.7.৩ থেকে সংযোগের একটি নতুন সংস্করণ প্রয়োজন। আমাদের জন্য সমস্যা সৃষ্টি করছিল। সুতরাং আমি এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন নামে একটি ফাইল তৈরি করেছি:

{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}

প্রকল্পের জন্য ইনস্টল করার সময় এনপিএমের স্বয়ংক্রিয়ভাবে এটি নেওয়া উচিত।

(দেখুন: https://nodejs.org/en/blog/npm/manasing-node-js- নির্ভরতা- সংক্ষিপ্তকরণের সাথে / )


7
আমি যখন এটি করি তখন কেবল grunt-contrib-connectনির্ভরতা এবং এর শিশুরা ইনস্টল হয়। প্যাকেজ.জসনে আমার অন্যান্য সমস্ত নির্ভরতা ইনস্টল করা নেই।
আইডিভিবি

5
আমি @ আইডিভিবি হিসাবে একই সমস্যা ছিল। আমি node_modulesডিরেক্টরিটি সম্পাদনা করে শেষ করেছি যাতে সম্পূর্ণ সঙ্কুচিত হওয়া নির্ভরতা ডাম্প ঠিক যা চেয়েছিল ঠিক তাই ওভাররাইড হয় না r তবে এখনও এক ধরণের বেদনাদায়ক সমাধান।
কোবোল্ড

2
@ ডমি এই ফাইলটি এনপিএম সঙ্কুচিতভাবে চালিয়ে তৈরি করা হয়েছে, এন্ট্রিগুলি হাত দ্বারা যুক্ত করা হয় না
কাচপিল

13
দুর্ভাগ্যক্রমে, যে বাগে উল্লিখিত হয়েছে, এনএমপি 4 সহ, সংক্ষিপ্ত পদ্ধতির কাজ আর চলবে না। (মুছে ফেলার সময় node_modules, একটি সংক্ষিপ্ত সঙ্কুচিত আকারের সাথে একটি ইনস্টল চালানো অবহেলিত মনে devDependenciesহলেও অক্ষত থাকবে বলে মনে হয় dependenciesতবে অন্য একটি ইনস্টল চালানো স্পষ্ট নয় এমন আইটেমগুলি সরিয়ে দেয়, সুতরাং আপাতত npm shrinkwrapএকটি সম্পূর্ণ ফাইল পেতে চালানো গুরুত্বপূর্ণ , প্রশ্নের অংশটি সংশোধন করুন, এবং তারপরে npm installআবার দৌড়ান )
ব্রেট জমির

6
এনএমপি 6.4 কেবল সঙ্কুচিত ফাইলটি ওভাররাইট করবে এবং সেকেলে নির্ভরতা ব্যবহার করবে
শেড স্টার্লিং

84

2018 বা তারও বেশি বয়সীদের জন্য, এনএমপি সংস্করণ 5 বা তার পরে ব্যবহার করুন package-lock.json: আপনার সম্পাদনা করুন : "requires"বিভাগটি থেকে গ্রন্থাগারটি সরিয়ে এটি "নির্ভরতা" এর অধীনে যুক্ত করুন।

উদাহরণস্বরূপ, আপনি deglobপ্যাকেজটির বর্তমানের পরিবর্তে globপ্যাকেজ সংস্করণ ব্যবহার করতে চান 3.2.11। আপনি খুলুন package-lock.jsonএবং দেখুন:

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "glob": "7.1.2",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  }
},

"glob": "7.1.2",থেকে সরান "requires", "dependencies"উপযুক্ত সংস্করণ সহ যুক্ত করুন :

"deglob": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz",
  "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=",
  "requires": {
    "find-root": "1.1.0",
    "ignore": "3.3.5",
    "pkg-config": "1.1.1",
    "run-parallel": "1.1.6",
    "uniq": "1.0.1"
  },
  "dependencies": {
    "glob": {
      "version": "3.2.11"
    }
  }
},

এখন আপনার node_modulesফোল্ডারটি সরান , চালান npm installএবং এটি "dependencies"বিভাগে অনুপস্থিত অংশ যুক্ত করবে ।


4
এটি দুর্দান্ত, যতক্ষণ npm installএক সময় চালায়। আমার ক্ষেত্রে সম্পাদনাগুলি প্রয়োজনীয় কারণ নেস্টেড ডিপ ব্যর্থ হচ্ছিল।
প্যাপসেলার 9

59
npm iআপনার প্যাকেজ-লক.জসন সম্পাদনা করার পরিবর্তে এবং সেখানে "নির্ভরতা" বাচ্চার নির্ভরতা যুক্ত করার পরিবর্তে চালানো যেকোন সময় মুছে ফেলা হবে, আপনার প্যাকেজে শিশু নির্ভরতা যুক্ত করুন। জেসন "নির্ভরতা" বিভাগে
18-18 এ ট্রিকপট্টি

6
আমি একটি লাইব্রেরি তৈরি করেছি যা আপনার জন্য স্বয়ংক্রিয়ভাবে এটি করে: github.com/rogeriochaves/npm-for-resolutions
Rogerio Chaves

14
এটি কাজ করে তবে তারপরে যদি আমি npm installআবার দৌড়ে যাই তবে সমস্ত পরিবর্তনগুলি package-lock.jsonউল্টে যেতে হবে এবং আমি ডিপটির খারাপ সংস্করণটি পাই।
2rs2ts

14
আমি চালানোর npm ciএবং এই স্পর্শ করে নাpackage-lock.json
sschoof

31

সুতা ব্যবহারকারীদের জন্য।

সুতা ক্লিপটি আমার এনএমপি-সঙ্কোড়াপ্রাপ.জসন ফাইলটিকে অগ্রাহ্য না করা পর্যন্ত আমি এনএমপি সঙ্কুচিত ব্যবহার করার চেষ্টা করেছি।

এর জন্য সুতার https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ রয়েছে । ঝরঝরে।

এই উত্তরটিও দেখুন: https://stackoverflow.com/a/41082766/3051080


0

আমার একটি সমস্যা ছিল যেখানে নেস্টেড নির্ভরতাগুলির মধ্যে একটিতে এনপিএম অডিট দুর্বলতা ছিল, তবে আমি এখনও পিতামাতার নির্ভরতার সংস্করণ বজায় রাখতে চেয়েছিলাম। এনপিএম সঙ্কুচিত সমাধান আমার পক্ষে কাজ করে না, তাই নেস্টেড নির্ভরতা সংস্করণটি ওভাররাইড করতে আমি কী করেছি:

  1. প্যাকেজ-লক.জসনের 'প্রয়োজন' বিভাগের নীচে নেস্টেড নির্ভরতা সরিয়ে ফেলুন
  2. প্যাকেজ.জসনে ডেভিনিডেন্সের অধীনে আপডেট হওয়া নির্ভরতা যুক্ত করুন, যাতে এটির প্রয়োজন মডিউলগুলি এখনও এটি অ্যাক্সেস করতে সক্ষম হবে।
  3. এনপিএম i

-1

এনপিএম সঙ্কুচিত এই সমস্যাটির দুর্দান্ত সমাধান দেয়। এটি আমাদের নির্দিষ্ট উপ-মডিউলটির একটি নির্দিষ্ট নির্ভরতার সেই সংস্করণটিকে ওভাররাইড করতে দেয়।

মূলত, আপনি এনএমপি ইনস্টল চালানোর সময়, এনপিএম প্রথমে আপনার মূল ডিরেক্টরিতে দেখবে যে কোনও এনপিএম-সঙ্কুচিত। Json ফাইল বিদ্যমান আছে কিনা তা দেখতে। যদি এটি হয় তবে এটি প্যাকেজ নির্ভরতা নির্ধারণ করতে প্রথমে এটি ব্যবহার করবে এবং তারপরে প্যাকেজ.জসন ফাইলগুলির মাধ্যমে কাজ করার স্বাভাবিক প্রক্রিয়াতে ফিরে আসবে।

একটি এনপিএম-সঙ্কোচনপ্রাপ্ত.জসন তৈরি করতে, আপনাকে যা করতে হবে তা করতে হবে

 npm shrinkwrap --dev

কোড:

{
  "dependencies": {
    "grunt-contrib-connect": {
      "version": "0.3.0",
      "from": "grunt-contrib-connect@0.3.0",
      "dependencies": {
        "connect": {
          "version": "2.8.1",
          "from": "connect@~2.7.3"
        }
      }
    }
  }
}

3
এটি বর্তমানে গৃহীত উত্তরের চেয়ে আলাদা? এই উত্তরে দুটি আপোভিত মন্তব্য রয়েছে যে এনপিএমের নতুন সংস্করণগুলিতে অতিরিক্ত ম্যানুয়াল পদক্ষেপের প্রয়োজন হয়, অথবা এই সমাধানটি দিয়ে অনাকাঙ্ক্ষিত জিনিসগুলি করা উচিত। এটা কি হয় না?
ফ্যাবিও বেলট্রামিণী

-1

আমি একটি সমাধান খুঁজে পেয়েছি যা আমার পক্ষে কাজ করেছিল।

So. অন্যান্য সমস্ত সমাধানের প্রস্তাবিত হিসাবে প্রথমে আপনার এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন ফাইলটি সম্পাদনা করুন।

তারপরে, (উইন্ডোজে):

  • 'Npm-shrinkwrap.json' ফাইলটিতে ডান ক্লিক করুন
  • প্রোপার্টি
  • বৈশিষ্ট্যের অধীনে 'কেবল পঠনযোগ্য' নির্বাচন করুন। এটি mpn-shrinkwrap.json ফাইলটি পরিবর্তন করতে এনপিএমকে প্রতিরোধ করবে।

অন্যান্য প্রস্তাবিত সমাধানগুলি যথেষ্ট ভাল যদি আপনি কেবল একবার 'এনপিএম ইনস্টল' পরিচালনা করেন making তবে প্রথম 'এনএমপি ইনস্টল'-এর পরে' এনপিএম-সঙ্কিঙ্কগ্র্যাপ.জসন 'ফাইলটি আপনার পরিবর্তনের আগের মতো আবারও সংশোধন করা হয়েছে।


-1: আপনি যখনই পরিবর্তন আনতে চান তার জন্য আপনাকে আবার ফাইলটি আনলক করা দরকার। এই ক্ষেত্রে আপনি ম্যানুয়াল সম্পাদনাগুলি যেকোনোভাবে সঙ্কুচিত ফাইলটিতে সরিয়ে ফেলবেন। অতিরিক্তভাবে যে কেউ আপনার কোডে সহযোগিতা করছে তাদেরও এই হ্যাকটি সক্ষম করতে হবে।
থোমাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.