উইন্ডোজের ডিপ নোড_মডিউলগুলির সাথে নোড.জেএস অ্যাপ্লিকেশন কীভাবে স্থাপন করবেন?


91

আমি একটি কৌতূহল ইস্যুতে চলে এসেছি - দৃশ্যত কিছু নোড.জেএস মডিউলের এত গভীর ফোল্ডার স্তর রয়েছে যে উইন্ডোজ অনুলিপি কমান্ড (বা পাওয়ারশেলের Copy-Itemযা আমরা আসলে ব্যবহার করছি) কুখ্যাত "পথটি দীর্ঘ দীর্ঘ" ত্রুটিটিকে আঘাত করে যখন পথ 250 এর বেশি হয় চর দীর্ঘ।

উদাহরণস্বরূপ, এটি একটি ফোল্ডার শ্রেণিবিন্যাস যা একটি একক নোড মডিউল তৈরি করতে পারে:

node_modules\nodemailer\node_modules\simplesmtp\node_modules\
xoauth2\node_modules\request\node_modules\form-data\node_modules\
combined-stream\node_modules\delayed-stream\...

এটি উন্মাদ বলে মনে হচ্ছে তবে নোড মডিউলগুলির সাথে এটি একটি বাস্তব।

মোতায়েনের সময় আমাদের কপি-পেস্ট ব্যবহার করা উচিত (আমরা হিরোকুর মতো "চালাক" টার্গেট প্ল্যাটফর্ম ব্যবহার করছি না যেখানে গিট মোতায়েনের বিকল্প হবে) এবং এটি উইন্ডোজে একটি গুরুতর সীমাবদ্ধতা।

কোনও এনপিএম কমান্ড বা এমন কিছু নেই যা node_modulesফোল্ডারটি সংহত করবে বা সম্ভবত রানটাইমের সময় যা প্রয়োজন তা কেবলমাত্র অন্তর্ভুক্ত করবে? (নোড মডিউলগুলিতে সাধারণত testফোল্ডার ইত্যাদি থাকে যা আমাদের মোতায়েন করার দরকার নেই)) অন্য কোনও ধারণা কীভাবে এটি চারপাশে কাজ করবেন? দুর্ভাগ্যক্রমে উইন্ডোজ ব্যবহার না করা বিকল্প নয় :)


4
আপনার প্রকল্পের একটি আছে package.jsonসঙ্গে dependenciesসেট করতে চান? যদি তাই হয়, আপনি node_modulesএনপিএম installবা updateনির্ভরতা ছাড়াই অনুলিপি করতে এবং ব্যবহার করতে পারেন ?
জোনাথন লোনভস্কি

4
@ জোনাথনলোনস্কি আমাদের পরিবেশ পরিবেশ npm installলক্ষ্য পরিবেশে সম্পাদনকে সমর্থন করে না , এটি স্থানীয়ভাবে একটি "ডিপ্লোয়মেন্ট প্যাকেজ" তৈরি করে কাজ করে (মূলত একটি জিপ প্লাস কিছু মেটাডেটা) যা টার্গেট মেশিনে আপলোড করা হয়, সেখানে বের করা হয় এবং এটিই এটি। সুতরাং আমি node_modulesসরাসরি অন্তর্ভুক্ত করা প্রয়োজন ।
বোরেক বার্নার্ড

উত্তর:


24

এনপিএম ভি 3 (সম্প্রতি প্রকাশিত) নির্ভরতাগুলি সমতল করে এই সমস্যাটি সমাধান করে .. বিভাগের অধীনে https://github.com/npm/npm/releases/tag/v3.0.0 এ প্রকাশের নোটগুলি দেখুন Checkflat flat

এবং এই ইস্যুতে শেষ মন্তব্যটি https://github.com/npm/npm/issues/3697


4
এর জন্য প্রকাশিত নোটগুলি flat flatএখন অন্য পৃষ্ঠায় দাফন করা হয়েছে। এখানে একটি সরাসরি লিঙ্ক: github.com/npm/npm/reLives/tag/v3.0.0
জন-ফিলিপ

ধন্যবাদ @ জন-ফিলিপ, নতুন লিঙ্কটির সাথে উত্তরটি আপডেট করেছেন
রমেশভেল

62

কেবল এটিতে যুক্ত করার জন্য ... আরেকটি জিনিস যা আমাকে সহায়তা করেছিল তা হল সমস্ত ইনস্টলড মডিউলগুলির সাথে তালিকাভুক্ত করা npm ls

যা আপনাকে মডিউল এবং সংস্করণগুলির একটি গাছ দেবে ... সেখান থেকে কোনটি সদৃশ তা সনাক্ত করা খুব সহজ ... npm dedupeআমার পক্ষে কিছুই করেনি। আমি নিশ্চিত নই যে এটি কোনও বাগ বা কী (নোড বনাম 10.16)

সুতরাং একবার আপনি একটি সদৃশ মডিউল সনাক্ত করে এটি ব্যবহার করে রুট নোড_মডিউল ডিরেক্টরিতে ইনস্টল করুন npm install dupemodule@1.2.3 --save-devসংস্করণটি গুরুত্বপূর্ণ।

এর পরে, আমি আমার নোড_মডিউলগুলি মুছে ফেললাম এবং একটি নতুন কাজ করেছি npm install

সংক্ষিপ্ত সংস্করণ

  1. npm ls সমস্ত ইনস্টল মডিউল একটি তালিকা পেতে।
  2. এই মডিউলগুলি দেখুন এবং সদৃশ মডিউলগুলি সনাক্ত করুন ( সংস্করণটি গুরুত্বপূর্ণ )
  3. npm install module@version --save-dev রুট নোড_মডিউল ডিরেক্টরিতে মডিউলগুলি ইনস্টল করতে এবং প্যাকেজ.জসন আপডেট করতে।
  4. rmdir node_modules নোড_মডিউলস ডিরেক্টরি মুছতে।
  5. npm install আপনার নির্ভরতা একটি নতুন কপি টান।

একবার আমি এটি করেছি, সবকিছু অনেক পরিষ্কার ছিল।

নোড_মডিউলস গাছটি সমতল করতে কোনটি নামিয়ে আনা হয়েছে তা দেখানোর জন্য আমি আপনার প্যাকেজ.জসন ফাইলটিতে মন্তব্য করার পরামর্শ দিচ্ছি।


এটি আমার জন্য কাজ করে মহান। ধন্যবাদ! আমার অজ্ঞতা ক্ষমা করুন, তবে কেন সর্বদা শীর্ষ স্তরে মডিউল ইনস্টল করা হয় না?
কালেব

4
@ কালেব সম্ভবত বিভিন্ন মডিউলগুলি একই মডিউলের বিভিন্ন সংস্করণে নির্ভর করে, বা সম্ভবত কারণ যা প্রয়োজন কেবল তা পাওয়া সহজ, তারপরে এটি ফ্যাক্টর করুন ... আমি জানি না।
বেন লেশ

7
নির্বিশেষে, টিপ জন্য ধন্যবাদ। আমি সবেমাত্র আমাদের প্রকল্প থেকে প্রায় 1700 নকল ফাইলগুলি উড়িয়ে দিয়েছি। জিনিসগুলি মুছে ফেলা বিকাশকারী হওয়ার আমার প্রিয় অংশ! : এছাড়াও, কিভাবে package.json মন্তব্য যোগ করার জন্য মধ্যে খুঁজছেন যে কেউ জন্য, এখানে আপনার উত্তর stackoverflow.com/questions/14221579/...
কালেব

github.com/joyent/node/issues/6960 নোড গাই বলে যে উইন্ডোজ প্রথম শ্রেণির নাগরিক। তারা বলেছিল. তবে তারা সমস্যাটি বন্ধ করে দিয়েছে এবং কিছুই ঠিক হয়নি। ভাগ্যবান উইন্ডোজ ব্যবহারকারীগণ।
ভি

38

আমি মনে করি না যে আপনার প্রতিবন্ধকতাগুলির কোনও দুর্দান্ত সমাধান রয়েছে, তবে এখানে এমন কিছু জিনিস রয়েছে যা সহায়তা করতে পারে।

  • npm dedupeআপনার ডিরেক্টরি হায়ারার্কিকে অনুকূল করতে ব্যবহার করার চেষ্টা করুন যা কিছু পথ সংক্ষিপ্ত করতে পারে
  • npm install --productionবিকাশ সরঞ্জাম ছাড়া ইনস্টল করতে ব্যবহার করুন
  • এই গভীরভাবে নেস্টেড নির্ভরতাগুলির মধ্যে কিছু নিন (কেবলমাত্র সমস্যাটি এড়াতে যথেষ্ট, আমি পরামর্শ দিই) এবং এগুলি শীর্ষ স্তরের নোড_মডিউলগুলি ডিরেক্টরিতে সরান। কেবল তাদের ট্র্যাক রাখুন যাতে আপনি জানেন যে আপনার প্রকৃত নির্ভরশীলতাগুলি এবং কোনটি এই সমস্যার জন্য কার্যকর রয়েছে।
  • বা সেই গভীরতা নির্ভরতাগুলির মধ্যে কয়েকটিকে সর্বোচ্চ node_modulesডিরেক্টরিতে সরিয়ে নিন যার your_project/node_modules/pkg_with_deep_depsফলে তাদের পর্যাপ্ত সংক্ষিপ্ত পথ থাকতে পারে তবে তারা এখনও কাজ করতে পারে। সুতরাং এটি হবে your_project/node_modules/pkg_with_deep_deps/node_modules
    • আমি মনে করি requireরান সময় এগুলি সঠিকভাবে সন্ধান করা উচিত। আপনি নিজে যা পরিবর্তন করেছেন তা স্পষ্ট করে নথিভুক্ত করতে হবে, আপনি কেন এটি করেছেন এবং নিজের সত্যিকারের নির্ভরতা সঠিকভাবে উপস্থাপন করতে পারবেনpackage.json

এখানে একটি গিথুব ইস্যু আলোচনা রয়েছে যা এই সমস্যাটির বিস্তারিতভাবে ব্যাখ্যা করে।


নির্দেশ করার জন্য ধন্যবাদ dedupe(এটি সম্পর্কে মোটেই জানতাম না) এবং --production( npm install -hএই বিকল্পটি দেখায়নি)! একটি জিপ সংরক্ষণাগার ব্যবহার দুর্ভাগ্যক্রমে কোনও বিকল্প নয়, উপরে একটি মন্তব্য দেখুন।
বোরেক বার্নার্ড

9
এনএমপি ডিডাপ কেবলমাত্র "সাধারণ" মডিউলকে শ্রেণিবিন্যাসের নিম্নতম সাধারণ স্থানে সমতল করবে। যথেষ্ট ভাল না. একটি সঠিক সমাধান পুরো পর্বতক্রমকে "সমতল" করার অনুমতি দেয় এবং সম্ভবত পরীক্ষা / ডক ডিরেক্টরিগুলি উপেক্ষা করার অনুমতি দেয়। একটি বিকল্প নোডের জন্য সরাসরি একটি ট্যারি ফাইল থেকে মডিউলগুলি পড়ার সমর্থন করে support
এমমান্ড

4
সম্মত হন, প্যাকেজগুলির এক ধরণের "বাইনারি" বিতরণ (জিপ, টারবাল, যাই হোক না কেন) খুব কার্যকর হবে।
বোরেক বার্নার্ড

11

আমি "এনপিএম-ফ্ল্যাটেন" নামক একটি নোড মডিউল লিখেছি যা এখানে আপনার জন্য আপনার নির্ভরতা আরও কমিয়ে দেয়: https://www.npmjs.org/package/npm-flatten

আপনি যদি কোনও বিভ্রান্তির সন্ধান করছেন, আমি একটি নিউগেট প্যাকেজও লিখেছি যা আপনার। নেট প্রকল্পের সাথে একটি সম্পূর্ণ নোড.জেএস পরিবেশকে সংহত করবে: http://www.nuget.org/packages/NodeEnv/

প্রতিক্রিয়া স্বাগত জানানো হবে।


এটি আমাদের পক্ষে কাজ করেছিল। আমরা প্রথমে এনএমপি ছাড়পত্র দৌড়ালে আমাদের আরও ভাল ফলাফল হয়েছিল।
শন রোয়ান

1

আমাকে সাহায্য করে এমন কিছু হ'ল আমার নোড.জেএস ফোল্ডারে লোকাল ড্রাইভের মানচিত্র তৈরি করা:

নেট ব্যবহার n: u computername \ c $ \ ব্যবহারকারীদের \ myname \ নথি \ node.js / স্থির: হ্যাঁ

পূর্বে: সি: \ ব্যবহারকারী \ আমার নাম \ নথিগুলি ode node.js \ প্রকল্পের নাম (৪ 45 টি অক্ষর) পরে: এন: \ প্রকল্পের নাম (১৪ টি অক্ষর যা 31 টি অক্ষর কম)

অনেক ক্ষেত্রে এটি কিছু মডিউল ইনস্টল করার অনুমতি দেয়।

আমি বলব যে আমি যখন আজ আমার ইউএসবি ড্রাইভে আমার সমস্ত কোড ব্যাকআপ দেওয়ার চেষ্টা করছিলাম তখন আমি এই সমস্যাটি আবার সন্ধান করেছি।

"সি: \ ব্যবহারকারীগণ \ আমার নাম \ নথিগুলি ode নোড.জেএস \ কৌণিক-ফোনসোন্যাট \ নোড_মডিউলগুলি \ কর্ম \ নোড_মডিউলস \ চকিডার \ নোড_মডিউলস \ যে কোনও ম্যাচ \ নোড_মডিউলস \ মাইক্রোম্যাচ ode নোড_মডিউলস \ নোড ফাইল-নোড mar নোড_মডিউলগুলি \ প্রসারিত-অগভীর \ বেঞ্চমার্ক \ ফিক্সচারগুলি খুব দীর্ঘ। "

এমনকি আমি যখন এন: ড্রাইভ চিঠিটি ব্যবহার করে তাদের ব্যাক আপ করার চেষ্টা করেছি তখনও পথের দৈর্ঘ্যের কারণে এটি কিছু ক্ষেত্রে ব্যর্থ হয়েছিল তবে উপরের একটিটি ঠিক করার জন্য এটি যথেষ্ট ছিল।


1

1) রিলিজ বিল্ড চলাকালীন, আপনি ভিজ্যুয়াল স্টুডিওগুলি এই ফাইলগুলি / ফোল্ডারটিকে স্ক্যান করে কোনও হাইড ফোল্ডার হিসাবে ফোল্ডার বৈশিষ্ট্য নির্ধারণ করতে পারেন (জাস্ট এটি নোড_মডিউলগুলিতে সেট করে)। তথ্যসূত্র: http://issues.umbraco.org/issue/U4-6219#comment=67-19103

2) আপনি সিএসপ্রজেক্ট ফাইলটিতে এক্সএমএল নোড অন্তর্ভুক্ত করে প্যাকেজিংয়ের সময় প্রকাশিত ফাইল বা ফোল্ডারটিকে বাদ দিতে পারেন।

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  ...
  <OutputPath>bin\</OutputPath>
   <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
  <ExcludeFilesFromDeployment>File1.aspx;File2.aspx</ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>Folder1;Folder2</ExcludeFoldersFromDeployment>
</PropertyGroup>

1

আমি মাইক্রোসফ্ট নোড.জেএস গাইডলাইনগুলি থেকে একটি সমাধান পেয়েছি ।

  • সংক্ষিপ্ত পথে শুরু করুন (উদা: সি: \ এসআরসি)
  • > npm install -g rimraf অতিক্রমকারী ফাইলগুলি মুছুন max_path
  • > npm dedupe সদৃশ প্যাকেজগুলি শীর্ষ-স্তরে নিয়ে যায়
  • > npm install -g flatten-packages সমস্ত প্যাকেজ শীর্ষ-স্তরে নিয়ে যায়, তবে সংস্করণ সংক্রান্ত সমস্যার কারণ হতে পারে
  • আপগ্রেড করুন npm@3যা করতে চেষ্টা করেnode_modules ফোল্ডারটিকে উত্তরাধিকার সূত্রে সর্বাধিক ফ্ল্যাট ।
    • নোড ভি 5 সহ জাহাজগুলি
    • বা… > npm install –g npm-windows-upgrade

0

এটি কোনও যথাযথ সমাধান নয়, আপনি যখন তাড়াহুড়া করবেন তখন প্রায় কাজ, তবে আপনি আপনার ফোল্ডারটি জিপ করতে, জিপড ফাইলটি সরাতে এবং কোনও সমস্যা ছাড়াই এটি আনজিপ করতে 7-জিপ ব্যবহার করতে পারেন ।

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


হ্যাঁ আমি প্রতিবার মঙ্গুজ ইনস্টল করার দরকার এটাই করি। এটিতে নেটিভ কোড পেয়েছে এবং আমি ভিজ্যুয়াল স্টুডিওর একাধিক / নতুন সংস্করণ পেয়েছি = ব্যর্থ। আমি কেবল ভিএস খুলতে পারি, প্রতিটি ব্যর্থ .sln ফাইল আনতে পারি এবং এটি পুনর্নির্মাণ করতে পারি। তবে আমার সম্পূর্ণ নোড_মডিউলগুলি - মংগু ফোল্ডারসেটটি প্রয়োজনীয় হিসাবে (অবশ্যই সংস্করণগুলি দেখার জন্য) কেবলমাত্র XCOPY করা সহজ।
মাইকেল ব্লাকেনশিপ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.