রুবিজেমের জন্য বান্ডলারের মতো প্রয়োজনীয় প্যাকেজগুলি ইনস্টল বা আপডেট করতে এনপিএম ব্যবহার করা


88

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

আমি npm bundleকমান্ড সম্পর্কে অবহিত , কিন্তু এটি কেবল প্যাকেজ ইনস্টল করা ডিরেক্টরিটি ওভাররাইড করে।

আমি এই ফ্যাশনে বান্ডিলার ব্যবহার করতে অভ্যস্ত:

# Gemfile
gem "rails", "3.0.3"

হোস্ট মেশিনে রেলগুলি v3.0.3 এবং অন্য কোনও প্রয়োজনীয় রত্ন ইনস্টল করে কেবলমাত্র যদি এটি ইতিমধ্যে বিদ্যমান না থাকে

> bundle install

আমি কীভাবে এনপিএম এর সাথে অনুরূপ কিছু অর্জন করতে পারি?


আমার উত্তর কি আপনি জানতে চেয়েছিলেন না?
আলফ্রেড

উত্তর:


148

এনপিএম ১.০ হিসাবে (আপনি এখন README ফাইলে পদক্ষেপগুলি অনুসরণ করে ডিফল্টরূপে যা পাবেন), "বান্ডিল" এখন আর আলাদা আলাদা জিনিস নয় - এটি কেবল "এটি কীভাবে কাজ করে"।

সুতরাং:

  1. package.jsonআপনার প্রকল্পের মূলে একটি ফাইল রাখুন
  2. সেই ফাইলটিতে আপনার ডিপগুলি তালিকাভুক্ত করুন

    { "name" : "my-project"
    , "version" : "1.0.0"
    , "dependencies" : { "express" : "1.0.0" } }
    
  3. npm install যেহেতু আপনি এটিকে কোনও আরগস সহ কল ​​করছেন এবং বৈশ্বিক মোডে নয়, এটি আপনার সমস্ত ডিপগুলি স্থানীয়ভাবে ইনস্টল করবে।

  4. require("express") এবং খুশি।

4
উত্পাদনের সময়, আমি your_app/node_modulesআপনার অ্যাপ্লিকেশন ডিরেক্টরি ডিরেক্টরিটির বাইরে স্থানীয় ডিরেক্টরিটি একটি সিমলিংকে পরিবর্তন করার পরামর্শ দিচ্ছি । আপনি যখনি মোতায়েন করবেন তখন আপনাকে প্রতিটি নির্ভরতা ডাউনলোড, বিল্ড এবং ইনস্টল করতে হবে না।
ড্যানিয়েল বিয়ার্ডসলে

ঠিক আছে. আমি যদি আমার প্যাকেজ.জসন আপডেট করতে ভুলে যাই? NPM- কে প্যাকেজ.জসনের জন্য নয় বরং আমার কোডটিতে আমি যে প্যাকেজগুলি ব্যবহার করছি তা দেখার জন্য বাধ্য করার কোনও উপায় আছে?
পোনো

4
এই পুরোপুরি সঠিক নয়। এনপিএম উপরের my-projectইন-এর জন্য সমস্ত নির্ভরতা ইনস্টল করবে ./node_modules/my-project/node_modules। আমি নিশ্চিত না যে এটি কারওর মধ্যে সমস্ত নির্ভরতা ইনস্টল করার কোনও সুবিধাজনক উপায় আছে কিনা ./node_modules ?
ড্যানিয়েল বিয়ার্ডসলে

@ ড্যানিয়েলবার্ডসলে এনপিএম কীভাবে কাজ করে তা আমি মনে করি না। যদি আপনি সেই আচরণটি দেখছেন এবং আপনি এটি পুনরুত্পাদন করতে পারেন, দয়া করে এনপিএম গিথুব পৃষ্ঠায় একটি সমস্যা পোস্ট করুন।
ইসাকাক

4
@ ড্যানিয়েলবার্ডসলে সাথে সম্মত হন। আমি এমনকি এনএমপি 1.1.70 এর সাথে এই আচরণটি ভুগছি

10

সম্পাদনা করুন: এটি কেবল এনপিএম সংস্করণ <1.0 এ প্রয়োগ হয়


এটি নির্ধারণ করা বেশ কঠিন ছিল, তবে এনপিএম এটি সম্ভব করেছে

আপনার তিনটি উপাদান প্রয়োজন

  1. আপনার সংগ্রহস্থলের একটি উপ-ডিরেক্টরি (যেমন deps/)
  2. package.jsonউপরের ডিরেক্টরিতে থাকা একটি ফাইল যা নির্ভরতাগুলি তালিকাভুক্ত করে
  3. index.jsউপরের ডিরেক্টরিতে একটি ফাইল যা আপনার নির্ভরতা প্রয়োজন

উদাহরণ

ভাবুন যে এক্সপ্রেসটি আপনার একমাত্র নির্ভরতা

Deps / package.json

দ্রষ্টব্য: প্রতিটি সময় আপনি নির্ভরতাগুলি সংশোধন করুন # সংস্করণটি বাড়ান

{
  "name": "myapp_dependencies",
  "version": "0.0.1",
  "engines": {
    "node": "0.4.1"
  },
  "dependencies":{
    "express": "2.0.0beta2"
  }
}

Deps / index.js

export.modules = {
  express: require('express')
  //add more
}

এখন আপনার এনএমপি ব্যবহার করে আপনার নির্ভরতা ইনস্টল করতে সক্ষম হওয়া উচিত। এমনকি আপনি আপনার স্থাপনার প্রক্রিয়াটির এই অংশটি তৈরি করতে পারেন

cd deps
npm install

তারপরে আপনার অ্যাপ কোডের মধ্যে আপনি এই জাতীয় মত প্রকাশের নির্দিষ্ট সংস্করণটিতে অ্যাক্সেস পেতে পারেন:

var express = require('myapp_dependencies').express;

ধন্যবাদ, আমি এ পর্যন্ত দেখা সেরা পদ্ধতি। তবে, require('express')ডিপস / ইনডেক্স.জেএসগুলি কি সর্বশেষতম এক্সপ্রেস সংস্করণটি আমদানি করবে না এবং প্রয়োজনীয়ভাবে আমরা ইনস্টল করা সংস্করণটিও না? আমি একটি নোডজেএস নুব তাই দয়া করে আমাকে সহ্য করুন।
adamJLev

না, এটি এর যাদু। npm installএটি নির্ভর করে প্যাকেজগুলির সঠিক সংস্করণগুলিতে আপনার ইনস্টল করা প্যাকেজটির ডিরেক্টরিতে চিহ্ন যুক্ত করে। যখন আপনার নির্ভরতা প্যাকেজ প্রয়োজন হয়, require('express')প্রথমে স্থানীয় ডিরেক্টরিটি পরীক্ষা করে এবং এক্সপ্রেসের সঠিক সংস্করণে সিমলিংকটি সন্ধান করে।
ড্যানিয়েল বিয়ার্ডসলে

5

আইজ্যাকস (লেখক এনপিএম) ব্লগ থেকে আপনার এই দুটি নিবন্ধটি পড়া উচিত। আমি মনে করি তারা সত্যই ভাল, এবং আমি বিশ্বাস করি যে কীভাবে আপনার লক্ষ্য অর্জন করতে হয়:

  1. http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm-could-do
  2. http://foohack.com/2010/08/intro-to-npm/

আমি বিশ্বাস করি লিঙ্ক # 1 (পয়েন্ট # 11) এটি ব্যাখ্যা করে:

11: আপনার সমস্ত নির্ভরতা প্যাকেজের মধ্যেই বান্ডিল করুন

আপনি যখন এনএমপি বান্ডেল কমান্ডটি ব্যবহার করেন, এনপিএম আপনার প্যাকেজের নোড_মডিউলগুলি ফোল্ডারে আপনার সমস্ত নির্ভরতা রাখে। কিন্তু এটি সেখানে থামে না।

আপনি যদি এমন কোনও কিছুর উপর নির্ভর করতে চান যা রেজিস্ট্রিতে নেই, আপনি এটি করতে পারেন। শুধু এটি করুন:

এনপিএম বান্ডেল ইনস্টল করুন http://github.com/ whoever/ w whil/ tarball/ master এটি সেই টারবলের সামগ্রীগুলি বান্ডলে ইনস্টল করবে এবং তারপরে আপনি এটি নির্ভরতা হিসাবে তালিকাভুক্ত করতে পারেন, এবং এটি ইনস্টল করার চেষ্টা করবে না যখন আপনার প্যাকেজ ইনস্টল করা হয়।

আপনার যদি কোনও কিছুর নিজস্ব কাঁটাচামচ থাকে এবং এটি নাম পরিবর্তন না করা পছন্দ করে তবে এটিও সহজ।

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


এটি দরকারী, যদিও আমি যা খুঁজছিলাম তা এটি ছিল না। সম্ভবত আমার স্পষ্টতা যোগ করতে হবে। আমি স্বয়ংক্রিয়ভাবে ইনস্টল বা আপডেট করার উপায় খুঁজছি (গন্তব্য মেশিনে) এনপিএম প্যাকেজগুলি যখনই আমার অ্যাপ্লিকেশনটি এটি স্থাপন করি তখন তার উপর নির্ভর করে। দেখে মনে হচ্ছে npm bundleডিফল্ট ব্যতীত আপনার সমস্ত নির্ভরতা নির্দিষ্ট ডিরেক্টরিতে সংগ্রহ করতে ব্যবহৃত হয়। আমি সম্ভবত আমার নিজের সমাধানটি নিয়ে আসব যা একইভাবে bundle install( bundlerরুবির জন্য) পারফর্ম করে
ড্যানিয়েল বিয়ার্ডলে

4
npm1.0+ সংস্করণ থেকে কেবল একটি নোট npm bundleসরানো হয়েছে। পরিবর্তে, কেবল npm installপ্যাকেজের নাম ছাড়া কমান্ডটি ব্যবহার করুন , এটি প্যাকেজ.জসনটি পড়বে এবং প্রয়োজনীয় প্যাকেজগুলি নীচে টেনে নেবে।
আর্থার মাল্টসন 26'11

2

এনএমপি সংস্করণ 1.1.2 হিসাবে, একটি নতুন কমান্ড রয়েছে npm shrinkwrapযা একটি npm-shrinkwrapped.jsonফাইল তৈরি করে , যা সাদৃশ্যযুক্ত Gemfile.lock। সফটওয়্যার পচা প্রতিরোধ করার জন্য, এটি তৈরি করা গুরুত্বপূর্ণ ( বান্ডলারের যুক্তি দেখুন )। বিশেষত নোডেজের যেমন একটি দ্রুত চলমান সম্প্রদায় রয়েছে।

bundle installএকটি Gemfile.lockস্বয়ংক্রিয়ভাবে তৈরি করার সময়, তৈরি npm installকরবে না npm-shrinkwrapped.json(তবে এটি উপস্থিত থাকলে এটি ব্যবহার করবে)। অতএব আপনার ব্যবহারের কথা মনে রাখা দরকার npm shrinkwrap

Http://blog.nodejs.org/2012/02/27/manages-node-js-d dependferences-with- shrinkwrap/ এ একটি সম্পূর্ণ গাইড পড়ুন


2

আমার কাছে মনে হয়েছে যে সবচেয়ে সহজ সমাধানটি হ'ল পতাকা package.jsonসহ একটি ফাইল ব্যবহার করা private(ঠিক গত মাসে এনএমপিতে যুক্ত) সেট করা true। এইভাবে, আপনি চালাতে npm installবা npm bundleআপনার প্রকল্পের নির্ভরতা দখল করতে পারেন , তবে আপনি দুর্ঘটনাক্রমে কাউকে আপনার অ-সর্বজনীন প্রকল্পটি প্রকাশ করা থেকে বিরত করছেন।

এখানে একটি উদাহরণ package.json:

{
"name": "yourProject"
,"version": "1.0.0"
,"dependencies": { "express" : ">=2.1.0" }
,"private": true
}

রানিং স্থানীয় সিস্টেমে এটি ইতিমধ্যে বিদ্যমান না থাকলে npm installইনস্টল হবে express; চলমান npm publishকারণ একটি ত্রুটি দেয় "private": true

সময়ের সাথে নির্ভরতা পরিবর্তনগুলি ট্র্যাক করতে আপনি এবং আপনার দলটি অভ্যন্তরীণরূপে সংস্করণ ট্যাগটি ব্যবহার করতে পারেন - প্রতিবার আপনি নির্ভরতা পরিবর্তন করার সময় সংস্করণটি মুছুন। আপনি কোন সংস্করণ ইনস্টল করেছেন তা দেখতে, ব্যবহার করুন npm ls installed


আমি মনে করি আপনার উদ্ধৃতি দেওয়া উচিত নয় trueএবং এটি কেবল কাজ করছে কারণ স্ট্রিংগুলি সত্যবাদী মান (যা, !!"false" === true)।
ক্যামিলো মার্টিন

1

npmপাশাপাশি আপনার অ্যাপ্লিকেশনটি প্রকাশ করুন এবং আপনার প্যাকেজ.জসন ফাইলে এর নির্ভরতাগুলি তালিকাবদ্ধ করুন।

যখন কেউ npmআপনার প্যাকেজ ইনস্টল করতে ব্যবহার করে,npm এর নির্ভরতাগুলি সমাধান করার যত্ন নেবে।

প্যাকেজগুলির অনুমান: http://wiki.commonjs.org/wiki/Packages/1.0


হ্যাঁ, তবে এটি একটি অন-ওপেনসোর্স ওয়েব অ্যাপ্লিকেশন। আপনার যদি এমন ধারণা থাকে যা অ্যাপ্লিকেশন প্রকাশের সাথে জড়িত না, দয়া করে আপনার উত্তর সম্পাদনা করুন বা অন্য একটি তৈরি করুন।
ড্যানিয়েল বিয়ার্ডসলে

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