নোড এনপিএম উইন্ডোজ ফাইল পাথগুলি প্যাকেজ ইনস্টল করার জন্য খুব দীর্ঘ


89

অবস্থা

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

2 প্রশ্ন

  1. উইন্ডোজের জন্য কি এনপিএম ওয়ার্কফ্লো রয়েছে যা ঠিক যেমনভাবে কাজ করেছিল ঠিক সেভাবেই কাজ করে? "কমান্ডটি এবং ফাইলগুলি ইনস্টল করুন" (যেমন ওএসএক্সে এনপিএম, লিনাক্সে এনপিএম, রুবি রত্ন বা এমনকি ন্যুগেটের সাথে তুলনাযোগ্য) আমি যতবার ব্যবহার করি ততবার ম্যানুয়াল ফাইল সম্পাদনা, সিমলিংক ইত্যাদির সাথে গুঁড়িয়ে দিতে চাই না I উইন্ডোজ এনপিএম।

  2. উইন্ডোজ এপিআই ফাইলের পথের সীমাটি সীমাবদ্ধ করার জন্য এনপিএম এবং নোড এক্সিকিউশনের জন্য কি কোনও ডকুমেন্টেড, স্থিতিশীল সাইগউইন ওয়ার্কফ্লো আছে?

নীচে তালিকাভুক্ত গোরি বিশদ ...

সাধারণ সমস্যা

  • একটি স্ট্যান্ডার্ড উইন্ডোজ কমান্ড প্রম্পট থেকে এনপিএম ইনস্টল চালানো গভীরভাবে নেস্টেড নোড_মডিউলগুলি হায়ারারচিতে ব্যর্থ।
  • জয়ন্তের গিথুব রেপো থ্রেড অনুসারে, এটি উইন্ডোজ কেন্দ্রিক পরিবেশে বিকাশকারীদের জন্য কোনও প্রসারণযোগ্য ওয়ার্কআরউন্ড সহ একটি স্বীকৃত ইস্যু । ( সত্যি? )
  • এনটি কার্নেল ফাইল পথের দৈর্ঘ্য 32,767 টি অক্ষর পর্যন্ত সমর্থন করে।
  • উইন্ডোজ এপিআই-এর MAXPATH 260 টি অক্ষরে সীমাবদ্ধ।
  • সমস্ত প্রধান উইন্ডোজ শেল জন্য উইন্ডোজ এপিআই হ্যান্ডলগুলি ফাইল অপারেশন এবং যে কোন বস্তু অন্তর্ভুক্ত রয়েছে: এক্সপ্লোরার, সিএমডি, PowerShell, MYSgit ব্যাশ, ইত্যাদি ( ? মাইক্রোসফট সত্যিই কতক্ষণ এনটিএফএস হয়েছে প্রায়? )
  • সাইগউইন দীর্ঘ ফাইল পাথ সমর্থন করে, তবে ক্রাইলএফ বিন্যাসের কারণে npm.cmd বাক্সের বাইরে কাজ করবে না। সাইগউইনের সাথে এটির কাজ করার জন্য আমি এনএমপি-তে ডস 2 ইউনিক্স রূপান্তর চেষ্টা করেছিলাম তবে এর সাথে অন্যান্য সমস্যা রয়েছে বলে মনে হচ্ছে।

আমার বর্তমান হ্যাক

  • সি: of এর মূলে স্টেজিং এরিয়া হিসাবে একটি "এন" ফোল্ডার তৈরি করুন, কারণ এটি আমার ফোল্ডারের পথকে ছোট করে।
  • আমার প্রয়োজন অনুসারে মডিউল ইনস্টল করতে "এন" ফোল্ডারের ভিতরে এনপিএম চালান।
  • সাইগউইন ফায়ার আপ করুন এবং গন্তব্য প্রকল্পে নোড_মডিউলগুলি ফোল্ডারটি অনুলিপি করতে সিপি ব্যবহার করুন।
  • নির্ভরতা পরিবর্তিত হলে বা যখন আমাকে একটি নতুন প্রকল্পের স্পিন আপ করতে হবে তখন ধুয়ে ফেলুন এবং পুনরাবৃত্তি করুন।

অপ্রয়োজনীয় ওয়ার্কআউন্ডস

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

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


আমি প্রায় ভেবেছিলাম আমার এই সমাধান হয়ে গেছে। আমি সাইগউইনকে নিম্নলিখিত 2 টি ফাইলের জন্য ডস 2 ইউনিক্স ব্যবহার করে এনপিএমের সাথে কাজ করতে পেরেছি: এনএমপিএসএমএমডি এবং এনপিএম
অ্যালান ম্যাকলেমোর

উইন্ডোজ এপিআই পাথ সীমাবদ্ধতাগুলি এনপিএমকে ব্যবহারযোগ্য নয়, কারণ কিছু এনপিএম মডিউল ফাইলগুলি তৈরি করতে ভিজ্যুয়াল স্টুডিও ব্যবহার করে। আমি ব্রাউজার-সিঙ্কটি এনপিএম করার সময় এই ত্রুটিটি পেয়েছি: সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ এমএসবাইল্ড \ মাইক্রোসফ্ট.সিপিপি \ ভি 4.0 \ ভি 120 \ মাইক্রোসফ্ট.সিপিপিউইল্ড স্টার্টস (301,5): ত্রুটি এমএস বি 3491: "রিলিজ \ আপত্তি \ বৈধতা \ বৈধতা t বৈধতা last বৈধতা নির্দিষ্ট পথ, ফাইলের নাম, বা উভয়ই খুব দীর্ঘ। সম্পূর্ণরূপে যোগ্যতাসম্পন্ন ফাইলের নামটি অবশ্যই 260 টির চেয়ে কম বর্ণের হতে হবে এবং ডিরেক্টরিটির নামটি 248 টির চেয়ে কম বর্ণের হতে হবে।
অ্যালান ম্যাকলিমোর

উইন্ডোতে এনপিএম সহ নোড মডিউলগুলি লোড করার জন্য আমার কাছে "টফি-টানিং" পদ্ধতি থাকতে পারে। এটিতে কয়েকটি রাউন্ড জড়িত রয়েছে: এনএমপি ইনস্টল, এনপিএম ডিডাপ, এনপিএম সঙ্কুচিত, এবং আরএম-আর নোড_মডিউল। বারবার এটি করা মনে হয় দীর্ঘ ফাইল পাথগুলি কিছুটা ডিগ্রি থেকে বেরিয়ে আসে, তবে এটি একধরণের ট্যাফি টানার মতো (যেমন আপনার কাজ শেষ না হওয়া পর্যন্ত শেষ হয়নি)। এটিকে আরও কোডকি বানানোর জন্য কেউ এই কোডিং করেছেন বা একটি স্বয়ংক্রিয় সরঞ্জাম লিখেছেন?
অ্যালান ম্যাকলেমোর

"হ্যাকি স্ক্রিপ্টস" এর কথা বলতে গিয়ে আমি এমন একটি লিখেছিলাম যা আমি চূড়ান্তভাবে হ্যাকি বলে মনে করি না। আমি ফেনস্ট্রেট নামে একটি সরঞ্জাম তৈরি করেছি যা আপনি ইনস্টলেশন পরে আপনার মডিউলগুলির ডিরেক্টরি কাঠামোটিকে প্রোগ্রাম্ট্যালি ফ্ল্যাট করতে ব্যবহার করতে পারেন। আপনি এটিকে বিশ্বব্যাপী এনপিএম পোস্টইনস্টল হুক হিসাবে ইনস্টল করতে পারেন।
zetlen

4
@ ইউনিয়াল ব্যক্তিগত ব্যবহারের জন্য এবং দ্রুত শুরু করার জন্য, উত্সাহী পুনরাবৃত্তভাবে আপনার নোড_মডিউলগুলি ফোল্ডারটি হাঁটা উচিত, যাতে আপনার এটি গভীর নির্ভরতার উপর ম্যানুয়ালি চালানোর প্রয়োজন হবে না। যাইহোক, এই নির্ভরশীলতাগুলি কাঁটাচুরি করা দুর্দান্ত হবে - আমি মনে করি যে সাধারণ ফেনস্ট্রেট কনফিগারেশনের সাথে প্রচুর কাঁটাযুক্ত মডিউলগুলি এনপিএম রক্ষণাবেক্ষণকারীদের জন্য একটি দুর্দান্ত বার্তা প্রেরণ করবে।
zetlen

উত্তর:


58

উইন্ডোজে গভীরভাবে নেস্ট করা ফোল্ডারগুলির সমস্যাটি বেশিরভাগ এনপিএম সংস্করণ দিয়ে শুরু হয়ে গেছে 3.x

এনপিএম অনুসারে:

.npm @ 3 উচ্চ স্তরের নোড_মডিউলগুলিতে যা কিছু করতে পারে তা স্থির করে ইনস্টলটিকে "সর্বাধিক সমতল" করে তোলে। এর অর্থ হল বাসা বাঁধাই কেবল দ্বন্দ্বগুলিতে ঘটে এবং যেমন গাছগুলি কখনই খুব গভীর হয় না। এই হিসাবে, উইন্ডোজ পাথ দৈর্ঘ্যের সীমাবদ্ধতা চালানো উচিত নয়।

আমি সবেমাত্র এনএমপি ইনস্টল করেছি 3.1.0এবং এটি একটি প্যাকেজে চেষ্টা করেছি যা ভয়ঙ্কর The specified path, file name, or both are too longত্রুটি ছুঁড়েছিল ।

সমস্যাটি চলে গেল।

আপনি এখান থেকে সর্বশেষ এনপিএম বিল্ডগুলি পেতে পারেন: এনপিএম রিলিজ


4
আমি উইন্ডোজ মেশিনে এনপিএম 3.x আপডেটের সাথে একটি সাফল্যও পেয়েছি। নির্লজ্জ প্লাগ: আমি উইন্ডোজ ট্রিপলেট.ফাই
ব্লগ /

22

উইন্ডোজ 8.1 এবং 10 এর কাছে উইন 32 পাথ সীমা বাড়ানোর বিকল্প রয়েছে:

  • ওপেন গোষ্ঠী নীতি সম্পাদক (প্রেস Windows+ + Rলিখুন gpedit.mscএবং হিট Enter)
  • নিম্নলিখিত ডিরেক্টরিতে নেভিগেট করুন: Local Computer Policy\Computer Configuration\Administrative Templates\System\Filesystem
  • Win32 দীর্ঘ পাথ সক্ষম করুন বিকল্পটিতে ডাবল ক্লিক করুন এবং এটি সক্ষম করুন।

এখানে চিত্র বর্ণনা লিখুন


বিকল্প আমার জন্য উপলব্ধ ছিল না, এবং fww, আমি জয় 7 প্রো থেকে আপগ্রেড করেছি যাতে এটি একটি সম্ভাব্য কারণ
ইভান মরিসন

@ ইভানমরিসন "ফাইল সিস্টেম \ এনটিএফএস N এনটিএফএস দীর্ঘ পাথ সক্ষম করুন" পরে উইন 10 বিল্ডগুলিতে "ফাইলসিসটেম \ উইন 32 দীর্ঘ পাথ সক্ষম করুন" নামকরণ করা হয়েছে। আমি ভবিষ্যতের রেফারেন্সের জন্য উত্তর আপডেট করেছি।
মার্সেলো ম্যাসন

4
উইন সার্ভারের জন্য কোনও ধারণা 2012 আর 2
সাইফরান

12

এটি সমাধান প্রায় কাজ।

কিছু নোড মডিউল রয়েছে যা আপনার জন্য আপনার নির্ভরতা সমতল করে।
লিঙ্কগুলি এখানে:

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


10
আমি ফ্ল্যাট-প্যাকেজগুলি ভাল-ডকুমেন্টেড এবং সহজেই ব্যবহারযোগ্য বলে খুঁজে পেয়েছি ।
স্ট্রিপলিং ওয়ারিয়র

3

অ্যালান -

আপনি লিখিত গিথুব ইস্যু থেকে,

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

এটি বর্তমানে (শেষ অবধি) নাম অনুসারে কাজ করছে, এবং এটির multi-stage-installজন্য লক্ষ্যযুক্ত npm@3npmবিকাশের শীর্ষস্থানীয় ফরেস্ট নরভেল নতুন বছরে উইন্ডোজ চলতে কিছুটা সময় ব্যয় করতে চলেছে, সুতরাং দয়া করে npmইস্যু ট্র্যাকারে উইন্ডো-সম্পর্কিত সমস্যা তৈরি করুন < https://github.com/npm/npm/issues >


3

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

সমস্যাটি নিয়ে প্রচুর আলোচনা রয়েছে, কিন্তু দৃষ্টিগোচর সমাধান নেই: https://github.com/joyent/node/issues/6960

https://github.com/npm/npm/issues/3697

আমার পক্ষে কাজ করা একটি কাজ হ'ল ম্যানুয়ালি নির্ভরতা যুক্ত করা যা আমার প্রকল্পের স্পষ্টতই প্রয়োজন হয় না।

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

এখানে আমার কাজের এক কমান্ড লাইন উদাহরণ:

mkdir c:\reallylongdirectorywillbreakinwindows
cd c:\reallylongdirectorywillbreakinwindows
npm init
npm install --save-dev grunt-bower-task
PathLengthChecker.exe RootDirectory="C:\reallylongdirectorywillbreakinwindows" MinLength=260

আমি ফিরে পেয়েছি:

261: সি: \ সত্যই দীর্ঘায়ু ডিরেক্টরি কনফিগার-চেইন \ রিডমে.মার্কডাউন

[স্নিপ - তাদের মধ্যে 12 জন ছিল]

এনপিএম ls কমান্ড অনুসারে :

└─┬ grunt-bower-task@0.4.0
  ├── async@0.1.22
  ├─┬ bower@1.3.12
  │ ├─┬ update-notifier@0.2.0
  │ │ ├─┬ latest-version@0.2.0
  │ │ │ └─┬ package-json@0.2.0
  │ │ │   └─┬ registry-url@0.1.1
  │ │ │     └─┬ npmconf@2.1.1
  │ │ │       ├─┬ once@1.3.1
  │ │ │       │ └── wrappy@1.0.1

আসুন এনপিএমকনফের সাথে চলুন - এটি সমস্ত ওভার-লেন্থ ফাইলগুলির জন্য ধারক যা সমস্যার সৃষ্টি করে। আমাদের npmconf 2.1.1 দরকার।

npm install --save-dev npmconf@2.1.1
(now delete the node_modules directory - you may have to use Windows Explorer if you can't do it with rmdir /s)
npm install
PathLengthChecker.exe RootDirectory="C:\reallylongdirectorywillbreakinwindows" MinLength=260

ফলাফল নেই - সমস্ত ফাইল সীমাবদ্ধ!

এখানে স্পষ্টত সতর্কবাণীটি হ'ল এটি প্যাকেজ প্রতি কেবল একবারই কাজ করে - একই মডিউলের বিভিন্ন সংস্করণে নির্ভরতা মূল নোড_মডিউলগুলি স্তরে ইনস্টল করা যায় না কারণ নোড ডিরেক্টরি কাঠামোর সংস্করণগুলির জন্য অ্যাকাউন্ট করে না।

এই কাজের ভিত্তিটি নিখুঁত নয়, তবে এটি উইন্ডোজে নোডের কাজ করার আমার মূল লক্ষ্যগুলি সমাধান করে, এবং যেহেতু রেজোলিউশনটি প্যাকেজ.জেসনে সঠিক, তাই কার্যনির্বাহী অন্য বিকাশকারীদের জন্য কাজ করে এবং কোনও ম্যানুয়াল বা বৈশ্বিক গোলমাল ছাড়াই সার্ভার তৈরি করে।


2

যদি আপনি বিশ্বব্যাপী এটি ইনস্টল করার সাথে ঠিক থাকেন তবে এটি একটি পরিশ্রমের কাজ হতে পারে:

আপনি যে রাস্তাটি এনপিএম গ্লোবাল মডিউলগুলি খুব সংক্ষিপ্ত কিছুতে ইনস্টল করছেন সে পথটি সামঞ্জস্য করতে পারেন (সাধারণত এটি হয় c:\users\\{username}\AppData\Roaming\npm\npm_modules:) যা ইতিমধ্যে অনেকগুলি অক্ষর গ্রহণ করে।

এটি এখানে সামঞ্জস্য করতে: উইন্ডোজে নোড.জেএস মডিউলগুলির জন্য ডিফল্ট গ্লোবাল ইনস্টলেশন ডিরেক্টরি পরিবর্তন করবেন?

আপনি যদি এটিতে সামঞ্জস্য করেন, উদাহরণস্বরূপ, c:\n\কিছু ক্ষেত্রে এটি সমস্যার সমাধান করতে পারে।


1

অবশেষে এটিই আমার জন্য স্থির করে দিয়েছে ...

গুল্প ইনস্টল করার পরে এবং ত্রুটিগুলি পাওয়ার পরে, চালান ... গল্প

আপনি যখন কোনও প্যাকেজ ব্যর্থ হতে দেখেন, ম্যানুয়ালি এটি ইনস্টল করুন --no-bin-link

sudo npm install {package} --no-bin-link

যেখানে {প্যাকেজ} এমন প্যাকেজ যা সমস্যায় পড়ে।

এত কিছুর পরেও আমি প্লাগইনটিতে 'gulp-notify' বার্তাটিতে ত্রুটি পেয়েছি: পাওয়া যায়নি: বিজ্ঞপ্তি-প্রেরণ।

এটি ভ্যাগ্র্যান্টের সাথে একটি প্লাগইন সমস্যার কারণে হয়েছিল। আপনি হয় বিজ্ঞপ্তি বন্ধ করতে পারেন ..

export DISABLE_NOTIFIER=true;

বা ভ্যাগ্র্যান্ট সহ প্লাগইন ইনস্টল করুন ।

শুভকামনা .. অনেক লোকের সুপারিশ অনুসরণ করেও আমি এটিতে দীর্ঘ সময় ব্যয় করেছি।

ব্র্যান্ডন


0

উইন্ডোতে:

  1. আপনার উইন্ডোজ এক্সপ্লোরার ব্যবহার করে, আপনার যোজনাগুলি ভাগ করা ফোল্ডারে নেভিগেট করুন (আমি উপায় দ্বারা স্কটবক্স ব্যবহার করছি) উদাহরণস্বরূপ C:\scotchbox/public/gulpProject
  2. ফোল্ডারের ঠিকানা বারে, টাইপ করুন cmdএবং টিপুনEnter
  3. আপনার গুল্প ইনস্টলেশন করুন npm install

4
একই উত্তর অনুলিপি করা এড়ানো । পরিবর্তে আপনার সদৃশ হিসাবে পতাকাঙ্কিত করা উচিত। অতিরিক্তভাবে, আপনার পোস্টে শপথ করবেন না।
টুনাকি

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