"এনপিএম ইনস্টল" এবং "এনপিএম সিআই" এর মধ্যে পার্থক্য কী?


215

আমি অবিচ্ছিন্ন একীকরণের সাথে কাজ করছি এবং এনপিএম সিআই কমান্ডটি আবিষ্কার করেছি ।

আমার কর্মপ্রবাহের জন্য এই কমান্ডটি ব্যবহার করে কী কী সুবিধা রয়েছে তা আমি বুঝতে পারি না।

এটা কি দ্রুত? এটি কি পরীক্ষাটিকে আরও শক্ত, ঠিক আছে এবং পরে করে?

উত্তর:


327

থেকে npm ডক্স :

সংক্ষেপে, এনপিএম ইনস্টল এবং এনএমপি সিআই ব্যবহারের মধ্যে প্রধান পার্থক্যগুলি হ'ল:

  • প্রকল্পের একটি বিদ্যমান প্যাকেজ-লক.জসন বা এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন থাকতে হবে।
  • যদি প্যাকেজ লকের নির্ভরতা প্যাকেজ.জসনের মধ্যে মেলে না, তবে এনএমপি সিআই প্যাকেজ লকটি আপডেট করার পরিবর্তে একটি ত্রুটির সাথে প্রস্থান করবে।
  • এনএমপি সিআই একবারে পুরো প্রকল্পগুলি ইনস্টল করতে পারে: পৃথক নির্ভরতা এই আদেশের সাথে যুক্ত করা যায় না।
  • যদি কোনও নোড_মডিউলগুলি ইতিমধ্যে উপস্থিত থাকে তবে এনপিএম সিআই ইনস্টল করার আগে এটি স্বয়ংক্রিয়ভাবে সরানো হবে।
  • এটি কখনই প্যাকেজ.জসন বা কোনও প্যাকেজ-লকে লিখবে না: ইনস্টলগুলি মূলত হিমশীতল।

মূলত, npm installসার্চ package.jsonনির্ভরতা একটি তালিকা তৈরি এবং ব্যবহার package-lock.jsonঅবহিত এইসব নির্ভরতা সংস্করণ ইনস্টল করার জন্য পারে। যদি নির্ভরতা না থাকে তবে package-lock.jsonএটি যুক্ত হবেnpm install

npm ci( সি অনটেনিউস আই নেটগ্রেশনের নামানুসারে) সরাসরি নির্ভরতা ইনস্টল করে package-lock.jsonএবং package.jsonকেবল কোনও মিল নেই এমন বৈধতা যাচাই করার জন্য ব্যবহার করে । যদি কোনও নির্ভরতা অনুপস্থিত বা বেমানান সংস্করণ থাকে তবে এটি ত্রুটি ছুঁড়ে দেবে

npm installনতুন নির্ভরতা যুক্ত করতে এবং কোনও প্রকল্পের উপর নির্ভরতা আপডেট করতে ব্যবহার করুন। সাধারণত, আপনি নির্ভরতার তালিকা আপডেট করে এমন পরিবর্তনগুলি টেনে নেওয়ার পরে আপনি এটি বিকাশের সময় ব্যবহার করবেন তবে npm ciএই ক্ষেত্রে এটি ব্যবহার করা ভাল ধারণা হতে পারে ।

আপনার npm ciযদি একটি ডিস্ট্রিমেন্টিক, পুনরাবৃত্তযোগ্য বিল্ড প্রয়োজন হয় তবে ব্যবহার করুন । উদাহরণস্বরূপ, অবিচ্ছিন্ন একীকরণের সময়, স্বয়ংক্রিয় কাজ ইত্যাদি এবং প্রথমবারের জন্য নির্ভরতা ইনস্টল করার পরিবর্তে npm install

npm install

  • একটি প্যাকেজ এবং এর সমস্ত নির্ভরতা ইনস্টল করে।
  • নির্ভরতাগুলি চালিত হয় npm-shrinkwrap.jsonএবং package-lock.json(সেই ক্রমে)।
  • তর্ক ছাড়াই : স্থানীয় মডিউলটির নির্ভরতা ইনস্টল করে।
  • গ্লোবাল প্যাকেজ ইনস্টল করতে পারেন।
  • এতে কোনও নিখোঁজ নির্ভরতা ইনস্টল করবে node_modules
  • এটি লিখতে পারে package.jsonবা package-lock.json
    • যখন একটি আর্গুমেন্টের সাথে ব্যবহার করা হয় ( npm i packagename) এটি package.jsonনির্ভরতা যুক্ত করতে বা আপডেট করতে লিখতে পারে ।
    • যখন তর্ক ছাড়াই ব্যবহার করা হয়, ( npm i) এটি package-lock.jsonইতিমধ্যে এই ফাইলে না থাকলে কিছু নির্ভরতার সংস্করণটি লক করতে লিখতে পারে ।

npm ci

  • কমপক্ষে এনপিএম v5.7.1 প্রয়োজন
  • প্রয়োজন package-lock.jsonবা npm-shrinkwrap.jsonউপস্থিত থাকতে হবে।
  • যদি এই দুটি ফাইলের নির্ভরতা মেলে না তবে একটি ত্রুটি ফেলে package.json
  • একবারে সমস্ত নির্ভরতা সরিয়ে node_modulesএবং ইনস্টল করে ।
  • এটি কখনও package.jsonবা লেখেন না package-lock.json

অ্যালগরিদম

npm ciসম্পূর্ণ নির্ভরতা গাছ তৈরি package-lock.jsonবা থেকে উত্পন্ন করার সময় npm-shrinkwrap.json, নিম্নলিখিত অ্যালগরিদম ( উত্স ) ব্যবহারের npm install সামগ্রীগুলি আপডেট করেnode_modules :

load the existing node_modules tree from disk
clone the tree
fetch the package.json and assorted metadata and add it to the clone
walk the clone and add any missing dependencies
  dependencies will be added as close to the top as is possible
  without breaking any other modules
compare the original tree with the cloned tree and make a list of
actions to take to convert one to the other
execute all of the actions, deepest first
  kinds of actions are install, update, remove and move

1
আমি npm installপ্যাকেজ.জসনে লিখতে পারতাম না । আপনি কি জানেন যে এটি এখানে কী লিখতে পারে?
Veve

5
ভাল এটি কিছুটা বিভ্রান্তিমূলক হতে পারে ... আপনি এটি নির্ভরতা ইনস্টল করতে, আপডেট করতে বা অপসারণ করতে ব্যবহার করার সময় এটি প্যাকেজ.জেসনে লিখবে। আমি লেখায় আরও স্পষ্ট করব, ধন্যবাদ!
লুকাস্কারো

এই অ্যালগরিদম নথিভুক্ত কোথায়? অর্থাৎ আপনার উত্স কি?
ইয়াঙ্গ্বর ক্রিশ্চিয়েনসেন

1
@ ইয়ংগার ক্রিশ্চিয়েনসেন এটি এনপিএম ডকুমেন্টেশনে রেফারেন্সের জন্য নির্দিষ্ট বিভাগে একটি লিঙ্ক যুক্ত করেছেন
লুকাসারো

4
npm install packageউভয়ই সংশোধন করতে পারে package-lock.json এবং package.json যখন npm installযে কোনও যুক্তিই কেবল সংশোধন করতে পারেpackage-lock.json
27 এ নোবো

20

npm ciযে কোনও বিদ্যমান নোড_মডিউল ফোল্ডার মুছবে এবং package-lock.jsonপ্রতিটি প্যাকেজের নির্দিষ্ট সংস্করণ ইনস্টল করতে ফাইলের উপর নির্ভর করবে। এটি এনপিএম ইনস্টলের চেয়ে উল্লেখযোগ্যভাবে দ্রুত কারণ এটি কিছু বৈশিষ্ট্য এড়িয়ে চলে। সিআই / সিডি পাইপলাইন এবং ডকার বিল্ডগুলির জন্য এটি পরিষ্কার রাষ্ট্র ইনস্টল দুর্দান্ত! আপনি এটি সমস্ত একবারে ইনস্টল করতে ব্যবহার করেন এবং নির্দিষ্ট প্যাকেজগুলি নয়।


9

আপনার লিঙ্ক করা ডকুমেন্টেশনের সংক্ষিপ্তসার ছিল:

সংক্ষেপে, এনপিএম ইনস্টল এবং এনএমপি সিআই ব্যবহারের মধ্যে প্রধান পার্থক্যগুলি হ'ল:

  • প্রকল্পের একটি বিদ্যমান প্যাকেজ-লক.জসন বা এনপিএম-সঙ্কিঙ্ক্র্যাপ.জসন থাকতে হবে।
  • যদি প্যাকেজ লকের নির্ভরতা প্যাকেজ.জসনের মধ্যে মেলে না, তবে এনএমপি সিআই প্যাকেজ লকটি আপডেট করার পরিবর্তে একটি ত্রুটির সাথে প্রস্থান করবে।
  • এনএমপি সিআই একবারে পুরো প্রকল্পগুলি ইনস্টল করতে পারে: পৃথক নির্ভরতা এই আদেশের সাথে যুক্ত করা যায় না।
  • যদি কোনও নোড_মডিউলগুলি ইতিমধ্যে উপস্থিত থাকে তবে এনপিএম সিআই ইনস্টল করার আগে এটি স্বয়ংক্রিয়ভাবে সরানো হবে।
  • এটি কখনই প্যাকেজ.জসন বা কোনও প্যাকেজ-লকে লিখবে না: ইনস্টলগুলি মূলত হিমশীতল।

2

কমান্ডগুলি কার্যকারিতাতে খুব অনুরূপ তবে পার্থক্যটি আপনার package.jsonএবং package-lock.jsonফাইলগুলিতে নির্দিষ্ট করা নির্ভরতা ইনস্টল করার জন্য গৃহীত পদ্ধতির মধ্যে ।

npm ciআপনার অ্যাপের সমস্ত নির্ভরতাগুলির একটি পরিষ্কার ইনস্টল সম্পাদন করে যেখানে npm installসিস্টেমে ইতিমধ্যে উপস্থিত থাকলে কিছু ইনস্টলেশন এড়িয়ে যেতে পারে। সিস্টেমে ইতোমধ্যে ইনস্টল করা সংস্করণটি ইনস্টল করার জন্য আপনার package.jsonউদ্দিষ্ট উদ্দেশ্য না থাকলে ইন্সটল করা সংস্করণটি ' প্রয়োজনীয় ' সংস্করণ থেকে পৃথক হলে সমস্যা দেখা দিতে পারে ।

অন্যান্য পার্থক্যগুলি npm ciহ'ল এটি কখনও আপনার package*.jsonফাইলগুলিকে স্পর্শ করে না । নির্ভরশীলতা সংস্করণগুলি package.jsonএবং package-lock.jsonফাইলগুলিতে না মেলে এটি ইনস্টলেশন বন্ধ করে দেয় এবং একটি ত্রুটি দেখায় ।

আপনি এখানে অফিসিয়াল ডক্স থেকে আরও ভাল ব্যাখ্যা পড়তে পারেন ।

অতিরিক্তভাবে, আপনি এখানে প্যাকেজ লক সম্পর্কে পড়তে চাইতে পারেন ।


1

এটি মনে রাখবেন যে আল্পাইন এর মতো হালকা নোড ডকারের চিত্রগুলিতে পাইথন ইনস্টল করা নেই যা নির্ভরতা node-gypযা ব্যবহার করে npm ci

আমি মনে করি এটি কিছুটা মতামতযুক্ত যে npm ciকাজ করার জন্য আপনাকে আপনার বিল্ডে নির্ভরতা হিসাবে পাইথন ইনস্টল করতে হবে।

এখানে আরও তথ্য ডকার এবং এনপিএম - জিপ ইআরআর! ঠিক নাই


0

যদিও প্রত্যেকে প্রযুক্তিগত পার্থক্যের জবাব দিয়েছে তবে কোনটি উভয়কে কীভাবে ব্যবহার করতে হবে তা ব্যাখ্যা করে না।

আপনার এগুলি বিভিন্ন পরিস্থিতিতে ব্যবহার করা উচিত।

npm installআপনি node_modulesডিরেক্টরি ক্যাশে করতে চান যখন বিকাশের জন্য এবং সিআই মধ্যে দুর্দান্ত । কখন এটি ব্যবহার করবেন? আপনি যদি অন্য লোকদের ব্যবহারের জন্য প্যাকেজ তৈরি করে থাকেন তবে আপনি এটি করতে পারেন (আপনি এই node_modulesজাতীয় প্রকাশে অন্তর্ভুক্ত করবেন না ) । ক্যাচিং সম্পর্কিত, সতর্কতা অবলম্বন করুন, যদি আপনি Node.jsমনে রাখার বিভিন্ন সংস্করণ সমর্থন করার পরিকল্পনা করেন node_modulesতবে Node.jsরানটাইম প্রয়োজনীয়তার মধ্যে পার্থক্যের কারণে এটি পুনরায় ইনস্টল করতে হতে পারে । আপনি যদি একটি সংস্করণে লেগে থাকতে চান তবে সর্বশেষতমটিকে আটকে দিন LTS

npm ciআপনি যখন কোনও প্রোডাকশন অ্যাপ্লিকেশন পরীক্ষা করতে এবং প্রকাশ করতে চান তখন এটি ব্যবহার করা উচিত (একটি চূড়ান্ত পণ্য, অন্য প্যাকেজগুলি ব্যবহার করবেন না) যেহেতু আপনার ইনস্টলেশনটি যতটা সম্ভব নির্ধারিত হওয়া জরুরি, এই ইনস্টলটি আরও বেশি সময় লাগবে তবে শেষ পর্যন্ত তৈরি হবে আপনার অ্যাপ্লিকেশন আরও নির্ভরযোগ্য (আপনি node_modulesযেমন একটি রিলিজ অন্তর্ভুক্ত )LTSসংস্করণ সহ স্টিক Node.js

বোনাস: আপনি এটি কীভাবে জটিল করতে চান তার উপর নির্ভর করে আপনি তাদের মিশ্রিত করতে পারেন। ইন বৈশিষ্ট্যটি শাখা অন gitআপনি কি ক্যাশে পারে node_modulesআপনার দলগুলির উৎপাদনশীলতা বৃদ্ধি এবং একত্রীকরণ অনুরোধ এবং মাস্টার শাখা উপর নির্ভর উপর npm ciএকটি নির্ণায়ক ফলাফল জন্য।

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