হিরোকুতে নোড.জেএস অ্যাপ তৈরি করার সময় আমার নোড_মডিউলগুলি পরীক্ষা করা উচিত?


368

আমি হিরোকুতে নোড.জেএস এর প্রাথমিক সূচনাগুলি এখানে অনুসরণ করেছি:

https://devcenter.heroku.com/categories/nodejs

এই নির্দেশাবলী আপনাকে .gitignore নোড_মডিউলগুলি তৈরি করতে বলবে না এবং তাই বোঝায় যে নোড_মডিউলগুলি গিটে পরীক্ষা করা উচিত। যখন আমি গিটে নোড_মডিউলগুলি অন্তর্ভুক্ত করি তখন আমার শুরু করা অ্যাপ্লিকেশনটি সঠিকভাবে চালিত হয়েছিল।

আমি যখন আরও উন্নত উদাহরণ অনুসরণ করেছি:

https://devcenter.heroku.com/articles/realtime-polyglot-app-node-ruby-mongodb-socketio https://github.com/mongolab/tractorpush-server (উত্স)

এটি আমাকে .gitignore এ নোড_মডিউল যুক্ত করার নির্দেশ দিয়েছে। সুতরাং আমি গিট থেকে নোড_মডিউলগুলি সরিয়েছি, এটি .gitignore এ যুক্ত করেছি, তারপরে পুনরায় মোতায়েন করেছি। এবার মোতায়েন ব্যর্থ হয়েছে:

-----> Heroku receiving push
-----> Node.js app detected
-----> Resolving engine versions
       Using Node.js version: 0.8.2
       Using npm version: 1.0.106
-----> Fetching Node.js binaries
-----> Vendoring node into slug
-----> Installing dependencies with npm
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Error: npm doesn't work with node v0.8.2
       Required: node@0.4 || 0.5 || 0.6
           at /tmp/node-npm-5iGk/bin/npm-cli.js:57:23
           at Object.<anonymous> (/tmp/node-npm-5iGk/bin/npm-cli.js:77:3)
           at Module._compile (module.js:449:26)
           at Object.Module._extensions..js (module.js:467:10)
           at Module.load (module.js:356:32)
           at Function.Module._load (module.js:312:12)
           at Module.require (module.js:362:17)
           at require (module.js:378:17)
           at Object.<anonymous> (/tmp/node-npm-5iGk/cli.js:2:1)
           at Module._compile (module.js:449:26)
       Dependencies installed
-----> Discovering process types
       Procfile declares types -> mongod, redis, web
-----> Compiled slug size is 5.0MB
-----> Launching... done, v9

"হিরকু পিএস" চালানো ক্র্যাশটিকে নিশ্চিত করে। ঠিক আছে, কোনও সমস্যা নেই, তাই আমি পরিবর্তনটি আবার ঘুরিয়ে দিয়েছি, নোড_মডিউলটি গিট ভাণ্ডারে ফিরে যুক্ত করে .gitignore থেকে সরিয়েছি। যাইহোক, ফেরত দেওয়ার পরেও, আমি এখনও স্থাপনের ক্ষেত্রে একই ত্রুটি বার্তাটি পাই তবে এখন আবার অ্যাপ্লিকেশনটি সঠিকভাবে চলমান। "হিরকু পিএস" চালানো আমাকে বলছে অ্যাপ্লিকেশনটি চলছে।

সুতরাং আমার প্রশ্ন এটি করার সঠিক উপায় কি? নোড_মডিউলগুলি অন্তর্ভুক্ত করবেন নাকি? এবং কেন আমি রোলব্যাক করার পরেও ত্রুটি বার্তা পাব? আমার অনুমান, গিটারের সংগ্রহস্থলটি হিরোকুর পাশে খারাপ অবস্থানে রয়েছে?


10
আমি হিরোকুতে নোড ভাষার মালিক এবং উত্তরটি সহজ: না node_modules। হিরোকু অ্যাপ্লিকেশনগুলিতে চেক ইন করবেন না ।
হান্টারলফটিস

@hunterloftis 'do node_modules চেক করবেন করার জন্য ' বা 'না node_modules চেক করবেন মধ্যে '? পরিষ্কার করার জন্য, হেরোকুতে নোড ভাষার মালিক হিসাবে, আপনি কি আমাদের গিট পুশের মাধ্যমে আমাদের পুরো নোড_মডিউলগুলি আপলোড করতে চান? আমি ব্যান্ডউইথ বর্জ্য এবং হিরোকু আমার গিট ধাক্কা পিছনে তাদের পাবেন যে সত্য কারণে পছন্দ না; তবে হেরোকুকে আমার অ্যাপ্লিকেশনটি লোড করার জন্য আমাকে আমার নোড_মডিউলগুলিতে ম্যানুয়ালি ফাইলগুলি সম্পাদনা করতে হয়েছিল। কাজেই এটির জন্য আমার সম্পাদিত ফাইলটি অন্তর্ভুক্ত পুরো মডিউলটিতে নোড_মডিউলগুলি বিয়োগ করতে হয়েছিল আমাকে।
জেডস্টোনডিপিএম

উত্তর:


400

দ্বিতীয় আপডেট

এফএকিউ আর পাওয়া যায় না।

এর ডকুমেন্টেশন থেকে shrinkwrap:

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

শ্যানন এবং স্টিভেন এর আগে এটি উল্লেখ করেছিলেন তবে আমি মনে করি, এটি গ্রহণযোগ্য উত্তরের অংশ হওয়া উচিত।


হালনাগাদ

উত্স নীচে প্রস্তাবিত জন্য তালিকাভুক্ত আপডেট করা হয়েছে । তারা আর node_modulesফোল্ডারটি প্রতিশ্রুতিবদ্ধ হওয়ার পরামর্শ দিচ্ছে না ।

সাধারণত, না। আপনার প্যাকেজগুলির জন্য নির্ভরতা সমাধানের জন্য এনপিএমকে মঞ্জুরি দিন।

ওয়েবসাইটগুলি এবং অ্যাপ্লিকেশনগুলির মতো আপনি যে প্যাকেজ মোতায়েন করেন তাদের জন্য আপনার সম্পূর্ণ নির্ভরশীলতা গাছটি লক করতে আপনার এনপিএম সঙ্কুচিত ব্যবহার করা উচিত:

https://docs.npmjs.com/cli/shrinkwrap


আসল পোস্ট

রেফারেন্সের জন্য, এনপিএম এফএকিউ আপনার প্রশ্নের স্পষ্ট উত্তর দেয়:

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

এবং এর জন্য কিছু ভাল যুক্তির জন্য, মিকাল রজার্স এর পোস্টটি পড়ুন


সূত্র: https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git


13
এটি সঠিক নয় - আসলে এটি খুব খারাপ ধারণা। আপনি যদি উইন্ডোজে বিকাশ করছেন তবে লিনাক্সে স্থাপন করছেন, আপনি মোতায়েন করার সময় আপনাকে নোড_মডিউলগুলি পুনর্নির্মাণ করতে হবে। যার অর্থ - বিশৃঙ্খলা। প্রচুর পরিমার্জিত ফাইল এবং কী করা যায় সে সম্পর্কে কোনও ধারণা নেই।
ব্যবহারকারী 3690202

8
এটি সম্ভব নয় - আমাদের কিছু ডেভস লক্ষ্যবস্তু উইন্ডোজ বিকাশ করে, অন্যরা লিনাক্সকে লক্ষ্য করে, তবে একই কোড বেস। নোড মডিউল - ওফস প্রতিশ্রুতিবদ্ধ না করাই সেরা উপায়।
ব্যবহারকারী 3690202

7
@ ইউজার 3690202 আপনার মতামতটি আদর্শের চেয়ে একটি প্রচলিত প্রচলিত মামলা রয়েছে, সুতরাং "এটি সঠিক নয়" বলা সম্ভবত একটি বাড়াবাড়ি। এটি বলার পরেও, আপনার সঠিক ব্যবহারের ক্ষেত্রে কী তা নিশ্চিত হন না তবে আমি উইন্ডোজ এবং লিনাক্স উভয়ই বিকাশের জন্য ব্যবহার করার কোনও কারণ ভাবতে পারি না। একটিকে লেগে থাকুন এবং আপনার সমর্থনের জন্য সমস্ত প্ল্যাটফর্মে পরীক্ষা বা QA চালান।
কোস্তিয়া

16
@ কোস্টিয়া আমাদের ব্যবহারের ঘটনাটি বেশ সাধারণ একটি বিষয়। আমরা স্বেচ্ছাসেবক এবং আমাদের নিজস্ব মেশিন ব্যবহার করছি, সংস্থাগুলির নয়। উন্মুক্ত উত্সের জন্য বেশ সাধারণ পরিস্থিতি বলে মনে হচ্ছে।
আদম

4
@ অ্যাডাম স্পর্শকাতর, আপনি কি সংকলিত ফাইল যুক্ত করতে পারেন .gitignore? এই ভাবে, উৎস Git হয়, এবং কোন কম্পাইল উপাদান একভাবে করতে নয়, কিভাবে distবা outputফোল্ডার ঘোঁৎ ঘোঁৎ এবং নি: শ্বাসে প্রকল্পে gitignored করছে।
কোস্টিয়া

160

গিটটি পরীক্ষা নাnode_modules করা নিয়ে আমার সবচেয়ে বড় উদ্বেগটি হ'ল 10 বছরের রাস্তা থেকে, যখন আপনার প্রডাকশন অ্যাপ্লিকেশনটি এখনও ব্যবহৃত হয়, এনপিএম এর আশেপাশে নাও হতে পারে। অথবা এনপিএম দূষিত হতে পারে; অথবা রক্ষণাবেক্ষণকারীরা তাদের সংগ্রহশালা থেকে যে লাইব্রেরীর উপর নির্ভর করছেন তা সরিয়ে ফেলার সিদ্ধান্ত নিতে পারে; অথবা আপনি যে সংস্করণটি ব্যবহার করছেন তা ছাঁটা হতে পারে।

এটি মেভেনের মতো রেপো ম্যানেজারগুলির সাথে প্রশমিত করা যেতে পারে, কারণ আপনি যে প্যাকেজগুলি ব্যবহার করেন সেগুলি দিয়ে আয়না বজায় রাখতে আপনি সর্বদা আপনার নিজস্ব স্থানীয় নেক্সাস বা আর্টিফ্যাক্টরি ব্যবহার করতে পারেন। আমি যতদূর বুঝতে পারি, এনএমপি-র জন্য এই জাতীয় সিস্টেমের অস্তিত্ব নেই। একইটি ক্লায়েন্ট-সাইড লাইব্রেরি ম্যানেজারদের মতো যেমন বোভার এবং জামজেস।

আপনি যদি নিজের গিট রেপোতে ফাইলগুলি প্রতিশ্রুতিবদ্ধ থাকেন তবে আপনি যখন পছন্দ করেন তখন সেগুলি আপডেট করতে পারেন এবং আপনার পুনরাবৃত্তিযোগ্য বিল্ডসের আরাম এবং আপনার তৃতীয় পক্ষের ক্রিয়াকলাপের কারণে আপনার অ্যাপ্লিকেশনটি ভেঙে ফেলবে না এমন জ্ঞান রয়েছে।


10
অপশন প্রচুর আজ: নেক্সাস ( issues.sonatype.org/browse/NEXUS-5852 ), Artifactory ( jfrog.com/jira/browse/RTFACT-5143 ), npm_lazy ( github.com/mixu/npm_lazy ), npm-lazy- আয়না ( npmjs.org/package/npm-lazy-mirror ), ইত্যাদি
জোহান

4
এনপিএমজেএস এফএকিউ থেকে উদ্ধৃতি: "আপনি যদি এনপিএম ইকোসিস্টেমের উপর নির্ভর করে ভৌগলিক হন তবে আপনার একটি ব্যক্তিগত এনপিএম মিরর বা একটি ব্যক্তিগত ক্যাশে চালানো উচিত" " আমি মনে করি আপনি যে ইস্যুটি উল্লেখ করছেন সেদিকে এই পয়েন্ট আছে, তাই না?
টেলান

3
এক্ষেত্রে একটি ঘটনা developers.slashdot.org/story/16/03/23/0652204/...
প্রোটোটাইপ

2
এনপিএম রাতারাতি অদৃশ্য হয়ে যাবে না, সুতরাং আপনার প্রতিশ্রুতিবদ্ধ ইতিহাসের বিবরণ এবং আপনার বিশাল আকারের বান্ডিল আকারটি হ্রাসের সাথে সুবিধাটি সত্যিই ভালভাবে জুড়ে না। যদি কেউ এমন একটি অ্যাপ্লিকেশন তৈরি করে যা তারা মনে করেন যে এটি এখনও 10 বছরে সক্রিয় থাকবে, তবে আশা করা যুক্তিযুক্ত যে এটি পথটি ধরে রাখলে প্রচুর রক্ষণাবেক্ষণ করবে। যদিও এনপিএম বিভ্রাট সম্পর্কে বিষয়টি আরও ভাল যুক্তি, যদিও উত্স প্রতিশ্রুতি দেওয়ার চেয়ে সেই ঝুঁকি হ্রাস করার জন্য সম্ভবত আরও ভাল উপায় রয়েছে।
স্যাম পি

3
এমনকি যদি আপনি নিজের নির্ভরশীলতাগুলি না করেন (তবে সম্ভবত আলাদা আলাদা ভাণ্ডারে) রাস্তাটি নিচে এক মাস বিপজ্জনক। যেমনটি আমি এক সকালে পেয়েছি যখন আমি আমার একটি প্রকল্পের ক্লোন করেছিলাম এবং প্যাকেজ সংস্করণটি এনপিপি থেকে সরিয়ে ফেলা হয়েছে found কাজ করতে এবং আবার বানাতে এনপিএম আপডেট পেতে আমার ক্যাসকেডিং নির্ভরতার সমস্ত সংস্করণগুলি পরিবর্তন করতে আমি আধা দিন কাটিয়েছি।
রিচার্ড

67

আপনি উচিত অন্তর্ভুক্ত করবেন node_modules আপনার .gitignore(অথবা বরং আপনি অন্তর্ভুক্ত করা উচিত node_modules আপনার সোর্স মধ্যে Heroku জন্য মোতায়েন)।

যদি node_modules :

  • তখন উপস্থিতnpm install সেই বিক্রেতাদের জন্য ব্যবহৃত libs ব্যবহার করবে এবং এর সাথে কোনও বাইনারি নির্ভরতা পুনর্নির্মাণ করবে npm rebuild
  • অস্তিত্ব নেই তারপরে npm installসমস্ত নির্ভরতা নিজেই আনতে হবে যা স্লাগ সংকলন পদক্ষেপে সময় যোগ করে।

এর জন্য নোড.জেএস বিল্ডপ্যাক উত্স দেখুন এই সঠিক পদক্ষেপের

তবে, আসল ত্রুটিটি সংস্করণ npmএবং এর সংস্করণের মধ্যে একটি বেমানান বলে মনে হচ্ছে node। এই ধরণের পরিস্থিতি এড়াতে সর্বদা স্পষ্টভাবে enginesআপনার বিভাগটিকে এই গাইডpackages.json অনুসারে সেট করা ভাল ধারণা :

{
  "name": "myapp",
  "version": "0.0.1",
  "engines": {
    "node": "0.8.x",
    "npm":  "1.1.x"
  }
}

এটি ডেভ / প্রোড সমতা নিশ্চিত করবে এবং ভবিষ্যতে এই জাতীয় পরিস্থিতির সম্ভাবনা হ্রাস করবে।


রায়ান সাহায্যের জন্য ধন্যবাদ। এটি আমাকে এনপিএম সংস্করণ ত্রুটিটি পেরিয়ে গেছে তবে রেডিস প্যাকেজটি সংকলন করার সময় এটি ব্যর্থ হয়। ত্রুটি বার্তাটি হ'ল "ওএসআরর: [এর্নো 2] এরকম কোনও ফাইল বা ডিরেক্টরি নেই: '/ ব্যবহারকারী / জেসন / স্বাদযুক্ত / স্বাদমণ্ডল / নোড_মডিউলস / রেডিস-ইউআরএল / নোড_মডিউলস / রেডিস / নোড_মডিউলস / হাইরেডিস / বিল্ড'"। দেখে মনে হচ্ছে এটি হীরকু সার্ভারে আমার স্থানীয় বাক্স থেকে কোনও পথ ব্যবহার করছে। নোড_মডিউলগুলিতে আমাকে .gitignore এ যুক্ত করার দরকার আছে এমন কিছু ফাইল রয়েছে?
জেসন গ্রিফিন

আমি নিশ্চিত না যে library নির্দিষ্ট গ্রন্থাগারের সাথে কী চলছে, তবে আমি এই ক্ষেত্রে নোড_মডিউলগুলি গিট থেকে বাদ দিয়ে চেষ্টা করব এবং এটি কিনা (এনপিএমকে সবকিছু আনতে বাধ্য করে এবং একটি নতুন পরিবেশের পরিবেশ সুনিশ্চিত করতে বাধ্য করে)।
রায়ান ডাইগলে

@ রায়ানডাইগলে সেরা অনুশীলন এখন (নভেম্বর ২০১৩) এনপিএম ( এনপিএমজেএস.আর.কম / ডক / )) এবং হিরকু ( ডেভেনসিটার.হেরোকু / পার্টিকেল / both ) উভয়ের দ্বারা সুপারিশ করা হয়েছে নোড_মডিউলগুলি গিট করতে। আপনি কি নিজের উত্তরটি আপডেট করবেন (যেমন এটির শীর্ষে বিলিং রয়েছে)?
টিম ডিজিগিনস

হিরকুতে চাপ দেওয়ার সময় আপনি আউটপুট পাবেন "-----> ভবিষ্যতের বিল্ডগুলির জন্য ক্যাশেড নোড_মডিউলগুলি ডিরেক্টরি"। এটি ভবিষ্যতের স্লাগ সংকলন সংক্ষিপ্ত করতে।
ph3nx

আমার একটি সমস্যা রয়েছে যে নোড_মডিউল ফাইলপথটি প্রতিশ্রুতিবদ্ধ হওয়ার পক্ষে অনেক দীর্ঘ। গাইটি ফাইলগুলি খুঁজে পাবে না।
কোড ফেরাউন

22

আমি এই মন্তব্য পরে এই ছেড়ে চলেছি: হিরোকুতে নোড.জেএস অ্যাপ তৈরি করার সময় আমার কি নোড_মডিউলগুলি পরীক্ষা করা উচিত?

কিন্তু স্ট্যাকওভারফ্লো এটি অদ্ভুতভাবে ফর্ম্যাট করছিল। আপনার যদি অভিন্ন মেশিন না থাকে এবং নোড_মডিউলগুলি পরীক্ষা করে থাকেন তবে নেটিভ এক্সটেনশনে একটি .gitignore করুন। আমাদের .gitignore দেখতে:

# Ignore native extensions in the node_modules folder (things changed by npm rebuild)
node_modules/**/*.node
node_modules/**/*.o
node_modules/**/*.a
node_modules/**/*.mk
node_modules/**/*.gypi
node_modules/**/*.target
node_modules/**/.deps/
node_modules/**/build/Makefile
node_modules/**/**/build/Makefile

প্রথমে সমস্ত কিছু পরীক্ষা করে এটি পরীক্ষা করুন এবং তারপরে আরও একটি দেব নিম্নলিখিতটি করুন:

rm -rf node_modules
git checkout -- node_modules
npm rebuild
git status

কোনও ফাইল পরিবর্তিত হয়নি তা নিশ্চিত করুন।


সবে এটি যুক্ত করা হয়েছে। আমার সমস্যা সমাধান। উইন্ডোজ গিথুব 7000+ নোড_মডিউল ফাইলগুলি যাওয়ার চেষ্টা করছে: /
ব্যাটম্যান

10

আমি বিশ্বাস করি যে npm installউত্পাদন পরিবেশে চলবে না। বেশ কয়েকটি জিনিস ভুল হতে পারে - এনপিএম আউটেজ, নতুন নির্ভরতা ডাউনলোড করা (সঙ্কুচিত হওয়া এটিকে সমাধান করে বলে মনে হচ্ছে) এর মধ্যে দুটি।

অন্য দিকে, node_modules গিট প্রতিশ্রুতিবদ্ধ করা উচিত নয়। তাদের বড় আকার ছাড়াও, এগুলি সহ কমিটগুলি বিভ্রান্তিকর হয়ে উঠতে পারে।

সেরা সমাধানগুলি npm installহ'ল: সিআই পরিবেশে চালানো উচিত যা উত্পাদন পরিবেশের মতো। সমস্ত পরীক্ষা চলবে এবং একটি জিপড রিলিজ ফাইল তৈরি করা হবে যা সমস্ত নির্ভরতা অন্তর্ভুক্ত করবে।


আপনি কেন সিআই-তে চালিত এমন একটি পদক্ষেপ রাখবেন যা আপনার মোতায়েনের অংশ হিসাবে চলবে না? এর অর্থ আপনার 2 সিস্টেমের মধ্যে সমতা নেই! উত্তরটি উপরে যেমন বলেছে - ফোল্ডারটি কেবল দেশীয় এক্সটেনশানগুলি উপেক্ষা করার জন্য প্রতিশ্রুতিবদ্ধ করুন, এইভাবে আপনি এনপিএম
আউটেজের

1
আপনার মন্তব্যের জন্য ধন্যবাদ. আমি বিশ্বাস করি যে আপনার প্রডাকশন সার্ভারে চালিত নোড_মডিউলগুলি এনপিএম ইনস্টল থেকে উত্পন্ন করা উচিত, ডেভগুলি যা কিছু করেছে তা থেকে নয়। কোনও দেবের নোড_মডিউল ফোল্ডারটি অগত্যা প্যাকেজ.জসনের সামগ্রীগুলির সাথে মেলে না।
ব্যবহারকারী 2468170

8

আমি প্রতিশ্রুতিবদ্ধ নোড_মডিউলগুলি ফোল্ডার এবং সঙ্কুচিত-মোড়ক উভয়ই ব্যবহার করছি। উভয় সমাধান আমাকে খুশি করতে পারেনি।

সংক্ষেপে: প্রতিশ্রুতিবদ্ধ নোড_মডিউলগুলি ভান্ডারগুলিতে খুব বেশি শব্দ যোগ করে।
এবং সঙ্কুচিত.জসন পরিচালনা করা সহজ নয় এবং কয়েকটি সঙ্কুচিত-মোড়ানো প্রকল্পটি কয়েক বছরের মধ্যে তৈরি করবে এমন কোনও গ্যারান্টি নেই।

আমি দেখতে পেয়েছি যে মোজিলা তাদের একটি প্রকল্পের জন্য পৃথক সংগ্রহশালা ব্যবহার করছে https://github.com/mozilla-b2g/gaia-node-modules

সুতরাং নোড সিএলআই সরঞ্জামে এই ধারণাটি প্রয়োগ করতে আমার বেশি সময় লাগেনি https://github.com/bestender/npm-git-lock

প্রতিটি বিল্ডের ঠিক আগে
এনপিএম-গিট-লক --repo [git@bitbucket.org: আপনার / উত্সর্গীকৃত / নোড_মডিউলগুলি / গিট / রিপোজিটারি.git] যুক্ত করুন

এটি আপনার প্যাকেজ.জসনের হ্যাশ গণনা করবে এবং হয় হয় কোনও রিমোট রেপো থেকে নোড_মডিউলগুলির সামগ্রীগুলি পরীক্ষা করে দেখবে, বা, যদি এটি এই প্যাকেজ.জসনের জন্য প্রথম নির্মাণ হয় তবে এটি পরিষ্কার npm installকরে ফলাফলগুলি রিমোট রেপোতে ঠেলে দেবে।


5

আমার জন্য যা কাজ করেছিল তা স্পষ্টভাবে প্যাকেজ.জসনের ("এনপিএম": "1.1.x") তে এনপিএম সংস্করণ যুক্ত করে নোড_মডিউলগুলিতে গিটের জন্য পরীক্ষা করছিল না। এটি স্থাপনে ধীর হতে পারে (যেহেতু এটি প্রতিটি সময় প্যাকেজগুলি ডাউনলোড করে) তবে প্যাকেজগুলি চেক ইন করার পরে সংকলিত করতে পেলাম না Her হেরোকু কেবলমাত্র আমার স্থানীয় বাক্সে বিদ্যমান ফাইলগুলি সন্ধান করছিল।


আপনি যদি আমার উত্তরটি সঠিক বলে মনে করেন, দয়া করে এটি গ্রহণ করুন? ধন্যবাদ!
রায়ান ডাইগলে

যদি এই এখনও পর্যন্ত বিতর্কের জন্য, আমি এই Stackoverflow পোস্টে যার উপরে আপনার প্রশ্নের প্রায় সদৃশ কটাক্ষপাত করা হবে: stackoverflow.com/questions/11459733/... মূলত, মনে হয় কনভেনশন node_modules চেক করতে হয়, এবং স্থানীয়ভাবে এই মডিউলগুলির আপনার সংস্করণগুলি পরিচালনা করুন। এটি বেশ যুক্তিসঙ্গত বলে মনে হচ্ছে, এবং সম্ভবত সবচেয়ে সংক্ষিপ্ত ব্যাখ্যাটি হ'ল: মাইকালরোগার্স / পোস্ট / নোডমডিউলস- ইন- গিট এইচটিএমএল শুভকামনা!
যোদ্ধা পোষ্টম্যান

3

নোড_মডিউলগুলি পরীক্ষা করার পরিবর্তে আপনার অ্যাপ্লিকেশনের জন্য একটি প্যাকেজ.জসন ফাইল তৈরি করুন।

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


আমার কাছে একটি প্যাকেজ.জসন আছে। এটিতে নিম্নলিখিতটি রয়েছে: {"নাম": "নোড-উদাহরণ", "সংস্করণ": "0.0.1", "নির্ভরতা": express "এক্সপ্রেস": "2.5.x", "রেডিস-ইউআরএল": "0.1" 0 "," মঙ্গডব ":"> = 0.9.9 "}," ইঞ্জিন ": {" নোড ":" 0.8.x "}}
জেসন গ্রিফিন

নোড_মডিউলস ডিরেক্টরি তৈরি করতে আমি আমার স্থানীয় বাক্সে করেছি। এটাই আমি চেক ইন করেছি, তারপরে সরানো হয়েছে, তারপরে আবার যুক্ত করা হবে।
জেসন গ্রিফিন

টিউটোরিয়ালটি আরও দেখার পরে দেখে মনে হচ্ছে তারা নোড_মডিউলগুলি প্রতিশ্রুতিবদ্ধ করছে। সেক্ষেত্রে নোড_মডিউলগুলি না করার কোনও উপায় আছে কিনা তা আমি নিশ্চিত নই। দুঃখিত
matzahboy

3

আমি এই সমাধানটি ব্যবহার করছি:

  1. ধারণ করে এমন পৃথক সংগ্রহশালা তৈরি করুন node_modules। আপনার যদি নেটিভ মডিউলগুলি থাকে যা নির্দিষ্ট প্ল্যাটফর্মের জন্য তৈরি করা উচিত তবে প্রতিটি প্ল্যাটফর্মের জন্য পৃথক সংগ্রহস্থল তৈরি করুন।
  2. আপনার প্রকল্পের সংগ্রহস্থলের সাথে এই সংগ্রহস্থলগুলি সংযুক্ত করুন git submodule:

git submodule add .../your_project_node_modules_windows.git node_modules_windows

git submodule add .../your_project_node_modules_linux_x86_64 node_modules_linux_x86_64

  1. প্ল্যাটফর্ম-নির্দিষ্ট node_modulesথেকে node_modulesডিরেক্টরিতে লিঙ্ক তৈরি করুন এবং এতে যুক্ত node_modulesকরুন.gitignore
  2. চালান npm install
  3. সাবমডিউল সংগ্রহস্থল পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।
  4. আপনার প্রকল্পের সংগ্রহের পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।

সুতরাং আপনি সহজেই node_modulesবিভিন্ন প্ল্যাটফর্মের মধ্যে স্যুইচ করতে পারেন (উদাহরণস্বরূপ যদি আপনি ওএস এক্সে বিকাশ করছেন এবং লিনাক্সে স্থাপন করছেন)।


3

Https://web.archive.org/web/20150212165006/http://www.futurealoof.com/posts/nodemodules-in-git.html থেকে :

সম্পাদনা: মূল লিঙ্ক ছিল এই এক কিন্তু এখন মৃত। এটি চিহ্নিত করার জন্য @ ফ্ল্যাভিওকে ধন্যবাদ।

পুনরুদ্ধার করতে।

  • আপনি মোতায়েন করেন এমন অ্যাপ্লিকেশনগুলির জন্য কেবল নোড_মডিউলগুলি পরীক্ষা করুন, আপনি বজায় রাখছেন এমন পুনরায় ব্যবহারযোগ্য প্যাকেজগুলি নয়।
  • যে কোনও সংকলিত নির্ভরতাগুলি তাদের উত্সটি চেক ইন করা উচিত, সংকলন লক্ষ্যগুলি নয়, এবং pm n রাত্রে স্থাপনার সময় পুনর্নির্মাণ করা উচিত।

আমার পছন্দের অংশ:

আপনারা সমস্ত লোক যারা আপনার গিটিগনরে নোড_মডিউল যুক্ত করেছেন, সেই বিষ্ঠা অপসারণ করুন, আজ , এটি একটি যুগের নিদর্শন যা আমরা সকলেই পিছনে ফেলে খুব খুশি। গ্লোবাল মডিউলগুলির যুগ মারা গেছে।


আপনার লিঙ্ক করা সাইটটি মনে হচ্ছে মেয়াদ উত্তীর্ণ হয়ে গেছে এবং এখন স্ক্যামি বিজ্ঞাপনে পূর্ণ। আমি আশা করি যে বিজ্ঞাপনগুলি "একটি যুগের নিদর্শনগুলি ছিল আমরা সকলেই পিছনে ফেলে খুশি হতে চাই"।
ফ্ল্যাভিও কপস 5:38

1
@ ফ্ল্যাভিওকপেস ওয়েবেব্যাক মেশিনের লিঙ্ক সহ আমার উত্তর আপডেট করেছে।
বেঞ্জামিন ক্রাউজিয়ার

2

http://nodejs.org/api/modules.html

[...] নোডটি বর্তমান মডিউলটির পৈতৃক ডিরেক্টরিতে শুরু হয় এবং যুক্ত করে /node_modulesএবং সেই অবস্থান থেকে মডিউলটি লোড করার চেষ্টা করে।

যদি এটি সেখানে না পাওয়া যায়, তবে গাছের গোড়ায় না আসা পর্যন্ত এটি প্যারেন্ট ডিরেক্টরিতে চলে যায়

আপনি যদি নিজের অ্যাপ্লিকেশনের সাথে নির্দিষ্ট নিজের নিজস্ব মডিউলগুলি ঘূর্ণন করে থাকেন তবে আপনি সেগুলি ( এবং কেবলমাত্র ) আপনার অ্যাপ্লিকেশনটিতে রাখতে পারেন/node_modules । এবং অন্যান্য সমস্ত নির্ভরতা পিতামাতার ডিরেক্টরিতে সরান।

এই চমত্কার ব্যবহারের ক্ষেত্রে এটি আপনাকে আপনার অ্যাপ্লিকেশনের জন্য বিশেষভাবে তৈরি মডিউলগুলি আপনার অ্যাপ্লিকেশনটির সাথে দুর্দান্তভাবে রাখতে দেয় এবং পরে ইনস্টল করা যেতে পারে এমন নির্ভরতার সাথে আপনার অ্যাপটিকে বিশৃঙ্খলা করে না।


1

দৃশ্যপট 1:

একটি দৃশ্য: আপনি এমন একটি প্যাকেজ ব্যবহার করেন যা এনপিএম থেকে সরানো হয়। নোড_মডিউলগুলি ফোল্ডারে যদি আপনার সমস্ত মডিউল থাকে তবে তা আপনার পক্ষে সমস্যা হবে না। আপনার যদি কেবল প্যাকেজ.জসনে প্যাকেজের নাম থাকে তবে আপনি এটি আর পেতে পারবেন না। যদি কোনও প্যাকেজ 24 ঘন্টােরও কম পুরানো হয় তবে আপনি সহজেই এনপিএম থেকে সরাতে পারেন। যদি এটি 24 ঘন্টা পুরানো হয় তবে আপনার তাদের সাথে যোগাযোগ করা দরকার। কিন্তু:

আপনি যদি সহায়তার সাথে যোগাযোগ করেন তবে তারা আপনার প্যাকেজের সেই সংস্করণটি অপসারণ করা অন্য কোনও ইনস্টল ভেঙে ফেলবে কিনা তা পরীক্ষা করে দেখবে। যদি তা হয় তবে আমরা এটি সরাব না।

আরও পড়ুন

সুতরাং এর সম্ভাবনা কম, তবে দৃশ্যপট 2 রয়েছে ...


দৃশ্য 2:

অন্য পরিস্থিতি যেখানে এটি হয়: আপনি আপনার সফ্টওয়্যারটির একটি এন্টারপ্রাইজ সংস্করণ বা একটি খুব গুরুত্বপূর্ণ সফ্টওয়্যার বিকাশ করুন এবং আপনার প্যাকেজ.জসনে লিখুন:

"dependencies": {
    "studpid-package": "~1.0.1"
}

আপনি function1(x)এই প্যাকেজটির পদ্ধতিটি ব্যবহার করেন ।

এখন studpid-প্যাকেজের ডেভেলপারদের পদ্ধতি নামান্তর function1(x)করতে function2(x)পারেন এবং তারা একটি ফল্ট করুন ... তারা থেকে তাদের প্যাকেজের সংস্করণ পরিবর্তন 1.0.1করতে 1.1.0। এটি একটি সমস্যা কারণ আপনি যখন npm installপরের বার কল করবেন তখন আপনি সংস্করণ গ্রহণ করবেন 1.1.0কারণ আপনি টিলড ( "studpid-package": "~1.0.1") ব্যবহার করেছেন ।

কল করার function1(x)ফলে এখন ত্রুটি ও সমস্যা দেখা দিতে পারে।


পুরো নোড_মডিউলগুলি ফোল্ডারটি (প্রায়শই 100 এমবি এর বেশি) আপনার সংগ্রহস্থলে পুশ করা আপনার মেমরির জায়গার জন্য ব্যয় করে। কয়েক কেবি (প্যাকেজ.জসন) কয়েকশ এমবি (প্যাকেজ.জসন এবং নোড_মডিউলস) এর সাথে তুলনা করে ... এটি সম্পর্কে চিন্তা করুন।

আপনি এটি করতে পারেন / এটি সম্পর্কে চিন্তা করা উচিত যদি:

  • সফ্টওয়্যারটি খুব গুরুত্বপূর্ণ।

  • কিছু ব্যর্থ হলে এটি আপনার অর্থ ব্যয় করে।

  • আপনি এনপিএম রেজিস্ট্রি বিশ্বাস করেন না। এনপিএমটি কেন্দ্রিয়ায়িত এবং তাত্ত্বিকভাবে বন্ধ হয়ে যেতে পারে।

আপনি প্রয়োজন হবে না ক্ষেত্রেই যদি এর 99.9% ফোল্ডার node_modules প্রকাশ করতে:

  • আপনি কেবল নিজের জন্য একটি সফ্টওয়্যার বিকাশ করুন।

  • আপনি কিছু প্রোগ্রাম করেছেন এবং ফলাফলটি কেবল গিটহাবের উপরে প্রকাশ করতে চান কারণ অন্য কেউ হয়তো এতে আগ্রহী হতে পারেন।


আপনি যদি চান না যে নোড_মডিউলগুলি আপনার ভান্ডারে থাকতে পারে তবে কেবল একটি .gitignoreফাইল তৈরি করুন এবং লাইনটি যুক্ত করুন node_modules

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