একটি একক এনপিএমসিআর ফাইলে একাধিক রেজিস্ট্রি কনফিগার করার কোনও উপায় আছে কি?


143

এখানে আমার সমস্যা। আমাদের একটি ব্যক্তিগত এনপিএম রেজিস্ট্রি রয়েছে যা কেবল ভিপিএন-এ কাজ করে। আমি একটি ফ্যালব্যাক রেজিস্ট্রি https://registry.npmjs.org রাখতে চাই যাতে আমি ভিপিএন থেকে বাইরে এসে এটি নির্বিঘ্নে কাজ করে।

পিএস বর্তমানে আমি এনএমপিআরসি ব্যবহার করছি যা .npmrc ফাইলগুলির মধ্যে একটি কার্যকারণ হিসাবে স্যুইচ করার ক্ষেত্রে ভাল কাজ করে


8
আমি আসলে একই জিনিস জানতে চাই। হতে পারে আমার ব্যক্তিগত রেজিস্ট্রিটি প্রথমে পিন করা হয়েছে এবং যদি এটি পাবলিক রেজিস্ট্রিতে ফ্যালব্যাক ব্যর্থ হয় (স্থানীয় ফ্যালব্যাক থেকে, ব্যক্তিগত সার্ভারে একটি সেটআপ নয়)। অথবা বিকল্পভাবে আমার ওয়াইফাই নামের উপর ভিত্তি করে আমার রেজিস্ট্রি স্যুইচিং।
ProLoser

1
আমার মতো হারানো আত্মার জন্য, এনএমপিআরসি
আন্ড্রেয়াস

উত্তর:


194

আপনার ফাইলে স্কোপড প্যাকেজগুলির জন্য আপনার একাধিক নিবন্ধ থাকতে পারে .npmrc। উদাহরণ স্বরূপ:

@polymer:registry=<url register A>
registry=http://localhost:4873/

সুযোগাধীন প্যাকেজগুলি https://registry.npmjs.org@polymer থেকে প্রাপ্ত হবে , তবে বাকিগুলি আপনার স্থানীয় এনপিএম থেকে প্রাপ্ত হবে from


15
এই পরামর্শের জন্য আপনাকে ধন্যবাদ। আপনি দয়া করে বলতে পারেন, এই স্কোপড রেজিস্ট্রিগুলিতে প্রমাণীকরণ যুক্ত করা কি সম্ভব? কারণ আমার প্রধান রেজিস্ট্রিতে আমার _auth কী প্রয়োজন।
ব্লুমকা

3
একটি স্কোপড প্যাকেজ কী? আমি এর আগে কখনও শুনিনি।
jcollum

1
@ জ্যাকলুম, স্কোপড প্যাকেজগুলি হ'ল নেমস্পেসের মাধ্যমে গ্রুপযুক্ত (বা স্কোপড) প্যাকেজগুলি। বিশদ জানতে ডকস.এন.এম.এমজেজেএস / মিসক / স্কোপ দেখুন । স্কোপিং একাধিক প্যাকেজ (@ ইঙ্গুলারের মতো) সংযুক্ত করতে ব্যবহার করা যেতে পারে যা একটি প্যাকেজ (@ কৌণিক / কোর) কৌণিকতার অঙ্গ, তবে এটি @ মাইকম্পানি / মাইপ্যাকেজের মতো একটি সংস্থাও হতে পারে।
প্যাটস

6
স্কোপড প্যাকেজগুলি ছাড়া এটি কি সম্ভব? আসুন আমরা যদি এই নির্দিষ্ট প্যাকেজটির সন্ধান করি তবে এই রেজিস্ট্রিতে যান, অন্যথায়
reg

2
@ পিনগিনোসড, না এটি এখনও (ডিসেম্বর 2019 হিসাবে) নন-স্কোপড প্যাকেজগুলির পক্ষে সম্ভব নয়। সোনাটাইপই একমাত্র সমাধান যা আমি জানি। দেখুন stackoverflow.com/a/50995915/3281336
PatS

71

৪.৪.১ সংস্করণে, আপনি যদি প্যাকেজের নাম পরিবর্তন করতে পারেন তবে:

npm config set @myco:registry http://reg.example.com

@mycoআপনার প্যাকেজ সুযোগ কোথায় ।

আপনি এইভাবে প্যাকেজ ইনস্টল করতে পারেন:

npm install @myco/my-package

আরও তথ্যের জন্য: https://docs.npmjs.com/misc/scope


আপনার প্যাকেজটি স্কোপ (এনপিএম init --scope = মাইকো) দিয়ে শুরু করার পরে এটি প্রকাশ করা দরকার।
gjegadesh

1
ঠিক আছে তবে কীভাবে সেই রেজিস্ট্রিটির
ফ্যালব্যাক রয়েছে

1
আমি Invalid package name "@npmjs/": name can only contain URL-friendly charactersযখন npm i
দৌড়াব

আমার কাছে এই
নামটিতে

এই পদ্ধতিরটি আমার কাছে আরও পরিষ্কার দেখাচ্ছে। প্যাকেজ.জসনে এটি করার কোনও উপায় আছে কি?
হরি কৃষ্ণ গাদদীপতি

19

প্রমাণীকরণের জন্য যে কোনও সমাধানের সন্ধানের জন্য, আমি স্কোপড প্যাকেজগুলির সমাধানটি যুক্ত করব যা আপনার .npmrcফাইলে একাধিক লাইন থাকতে পারে :

//internal-npm.example.com:8080/:_authToken=xxxxxxxxxxxxxxx
//registry.npmjs.org/:_authToken=yyyyyyyyyy

প্রতিটি লাইন একটি আলাদা এনপিএম রেজিস্ট্রি উপস্থাপন করে


4
আমি কমান্ডটি ব্যবহার করব npm login --registry=npm.example.com। এটি আপনার ব্যবহারকারীর ফোল্ডারে .npmrc ফাইলে লগইন শংসাপত্রগুলি (authTokens) সংরক্ষণ করবে, সুতরাং আপনার এটির উত্স কোডে ( ডকস.এনপিএমএস
সিআই /

এটি আমার জন্য কাজ করেছে, ধন্যবাদ, মূলত আমার লাইবে আমার প্রাইভেট নেক্সাস রেজিস্ট্রি ছিল তবে আমার লিবির আরও কয়েকটি নির্ভরতা রয়েছে যা থেকে ইনস্টল করা দরকার registry.npmjs.org, এটি আমার পক্ষে কাজ করেছে
চানুকা আশানকা

17

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

##############NPM ALIASES######################
alias npm-default='npm config set registry https://registry.npmjs.org'
alias npm-sinopia='npm config set registry http://localhost:4873/'

2
অনুরূপ সমাধান হ'ল একটি নাম প্রকাশ করুন যা এনজিপি -রেজিস্ট্রি বিকল্পটি পাস করে। এটি একই প্রভাব ফেলবে তবে কেবল একক আদেশের জন্য। সিনট্যাক্স হলalias npm-sin=npm --registry https://localhost:4873/
PatS

11

যেহেতু এটি কয়েক বছর হয়ে গেছে এবং এটি করা সম্ভব বলে মনে হচ্ছে না (একা এনপিএম ব্যবহার করে), তাই এই সমস্যার সমাধান হ'ল নেক্সাস রিপোজিটরি ম্যানেজারটি (সোনাইটাইপ থেকে) ব্যবহার করা। নেক্সাস একাধিক ভান্ডারগুলিকে সমর্থন করে, আপনাকে সেগুলি অর্ডার করতে দেয় এবং গতি বাড়ানোর জন্য প্রক্সি / ক্যাশেও দেয়।

একটি নিখরচায় সংস্করণ এবং প্রো / পেইড সংস্করণ বিদ্যমান। এটি সমর্থন করে এমন বৈশিষ্ট্যটি এখানে বর্ণিত হয়েছে: https://help.sonatype.com/repomanager3/node-packaged-modules-and-npm-regferences

প্রাসঙ্গিক তথ্য নীচে নকল করা হয়েছে যদি / যখন উপরের ইউআরএল / লিঙ্কটি তথ্যের কাজ বন্ধ করে দেয় তবে / যদি এখানে থাকে here

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

এটি আপনাকে ব্যক্তিগত এনএমপি রেজিস্ট্রেশনগুলি তৈরি করতে দেয়

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

এবং

সদৃশ ডাউনলোডগুলি হ্রাস করতে এবং আপনার বিকাশকারী এবং সিআই সার্ভারগুলির জন্য ডাউনলোডের গতি উন্নত করতে আপনার https://registry.npmjs.org এ হোস্ট করা রেজিস্ট্রি প্রক্সি করা উচিত । ডিফল্টভাবে এনপিএম সরাসরি এই রেজিস্ট্রিটি অ্যাক্সেস করে। আপনার প্রয়োজনীয় অন্য যে কোনও রেজিস্ট্রিও আপনি প্রক্সি করতে পারেন।

সুতরাং এই কাজটি পেতে আপনি যে কাজগুলি করেন তার দ্রুত বুলেটযুক্ত তালিকাটি হ'ল:

  • Nexus ইনস্টল করুন

  • একটি স্থানীয় / বেসরকারী রেপো তৈরি করুন (বা অন্য সার্ভারে আপনার ব্যক্তিগত রেপোতে নির্দেশ করুন)

  • এমন একটি গ্রুপ তৈরি করুন যা আপনার ব্যক্তিগত রেপো এবং সর্বজনীন রেপোকে তালিকাবদ্ধ করে।

  • সদ্য তৈরি "GROUP" এ নির্দেশ করতে আপনার $ HOME / .npmrc ফাইলটি কনফিগার করুন।

  • স্থানীয় রেপোতে আপনার ব্যক্তিগত এনপিএম প্যাকেজগুলি প্রকাশ করুন।

  • ব্যবহারকারীরা এখন ওয়ান টাইম সেটআপ চালাতে পারবেন।

npm config set registry https://nexus/content/groups/GROUP

  • তারপরে ব্যবহারকারীগণ উভয়ের মাধ্যমে সরকারী বা ব্যক্তিগত উভয় প্যাকেজ ইনস্টল করতে পারবেন npm install npm install my-private-package npm install lodash any-other-public-package

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

গুরুত্বপূর্ণ দ্রষ্টব্য: আপনি যখন আপনার উপাদানগুলি প্রকাশ করবেন তখন আপনাকে npm publish --registry https://nexus/content/repositories/private-repo my-private-packageকমান্ডটি নির্দিষ্ট করতে হবে যাতে আপনার প্যাকেজটি সঠিক রেপোতে প্রকাশিত হয়।


.npmrc ফাইলটিতে আমি রেজিস্ট্রি (আমার নিজস্ব শৈলী নিযুক্ত করার জন্য এবং পাবলিক শৈল্পিকাগুলি টানার জন্য) উভয়কেই কনফিগার করতে পারি যাতে এনপিএম প্রকাশের সময় আমি যখন উল্লেখ না করি? আমার নিদর্শনগুলিকে ঠেলে দেওয়ার জন্য আমি পৃথক এনএমপি সংগ্রহস্থল ব্যবহার করছি এবং সমস্ত নিদর্শনগুলি টানতে আমি ভার্চুয়াল সংগ্রহস্থল ব্যবহার করছি। .Npmrc ফাইল উভয় কনফিগার করতে দয়া করে আমাকে সহায়তা করুন।
অঙ্কিতা সিং

1
@ অঞ্জিতাসিংহ আমি কেবল এটি পেরিয়েছি। আপনি যদি আমার পছন্দ করেন যে প্রকাশের (যেমন npm-privateপরিবর্তে npm-group) জন্য আলাদা আলাদা সংগ্রহশালা রয়েছে , আপনি আপনার প্রকল্পের- registryকিকে- ওভাররাইড করতে পারেন package.json( https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packagesবিশদ বিবরণ দেখুন)। npm config set registry <url>আপনি এটি ব্যবহার করে উদাহরণস্বরূপ সেট করতে পারেন npm-group, এতে npm-registry(ফরোয়ার্ডিং সংগ্রহস্থল) এবং npm-private(আপনার নিজস্ব সংগ্রহস্থল) রয়েছে। আমি এই সমাধানটি ব্যবহার করেছি, কারণ স্থানীয় গিটল্যাব সিই থেকে শিল্পকর্মগুলি পাওয়া খুব জটিল ছিল।
ইগোর

7

আপনি registryআপনার .npmrcফাইলে প্রবেশের জন্য একাধিক ভাণ্ডার সিনট্যাক্স ব্যবহার করতে পারেন :

registry=http://serverA.url/repository-uri/
//serverB.url/repository-uri/
//serverC.url/repository-uri/:_authToken=00000000-0000-0000-0000-0000000000000
//registry.npmjs.org/

এটি আপনার এনএমপি বিভিন্ন সার্ভারে প্যাকেজগুলির সন্ধান করবে।


হ্যাঁ, তবে serverA, serverBএবং serverCউদাহরণ সংগ্রহস্থলগুলি সমস্তই আমাদের অভ্যন্তরীণ নেটওয়ার্ক থেকে আসে, এটি আপনার পক্ষে কাজ করবে না। এটি আপনার পক্ষে উপযুক্ত কিনা তা আমি জানি না তবে যদি মনে হয় আপনি অভ্যন্তরীণ রেপোসের জন্য কোনও নেক্সাস রিপোজিটরি ম্যানেজার স্থাপন করতে পারেন।
ফার্নান্দো ফার্নান্দেস

1
এই প্রতিক্রিয়া অনুসারে ডাবল স্ল্যাশের কোনও অর্থ নেই, সুতরাং আপনি কেবল মান ব্যতীত কীগুলি সেট করছেন
PinguinoSod

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

1
কেউ এই সমাধান চেষ্টা করে দেখুন। এটি কী কাজ করে এবং একটি ফ্যালব্যাক সংগ্রহস্থল কনফিগার করতে সহায়তা করে?
লুক পি। ইস্যাক

3

কিছু পদক্ষেপ যা আপনি চেষ্টা করতে পারেন। (এটি আমরা আমার কর্মক্ষেত্রে কীভাবে করি)

  • দুটি (বা আরও) সংগ্রহস্থল উত্স ঠিকানা সহ একটি রেজিস্ট্রি গ্রুপ তৈরি করুন। একটি আপনার অভ্যন্তরীণ ব্যক্তিগত এবং অন্যটি অভ্যন্তরীণটিকে অগ্রাধিকার দেওয়া এনএমপিজেগুলির একটি প্রক্সি হবে।
  • .Npmrc ফাইলটিতে এই গোষ্ঠীটিকে আপনার রেজিস্ট্রি করুন। প্রক্সি থেকে পাওয়া না গেলে এইভাবে এনপিএম সর্বদা অভ্যন্তরীণ থেকে এটি পাওয়ার চেষ্টা করবে

আশা করি এইটি কাজ করবে.


6
কীভাবে একজন এনএমপি তে একটি রেজিস্ট্রি গ্রুপ তৈরি করতে পারে? ওটার মানে কি?
টুপর্টুনট

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


1

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


1

2020 সালের 13 এপ্রিল পর্যন্ত এই জাতীয় কোনও কার্যকারিতা নেই যতক্ষণ না আপনি বিভিন্ন স্কোপগুলি ব্যবহার করতে সক্ষম হন তবে আপনি পোস্ট- ইনস্টল স্ক্রিপ্টটি কার্যকারণ হিসাবে ব্যবহার করতে পারেন । এটি সর্বদা কার্যকর হয়, ভাল , প্রতিটি এনপিএম ইনস্টলের পরে :

বলুন যে আপনি আপনার প্রাইভেট গিথুব রেপো থেকে @ foo-org / foo- প্যাক-প্রাইভেট ইনস্টল করার জন্য আপনার .npmrc কনফিগার করেছেন , তবে @ foo-org / foo- প্যাক পাবলিক পাবলিক প্যাকেজটি এনপিএম এ রয়েছে (একই সুযোগে: foo- org )।

আপনার পোস্ট- ইনস্টলটি দেখতে দেখতে এটি দেখতে পারে:

"scripts": {
    ...
    "postinstall": "mv .npmrc .npmrcc && npm i @foo-org/foo-pack --dry-run && mv .npmrcc .npmrc".
}

ভুলবেন না মুছে ফেলার জন্য -সংস্থা foo বিন্যাস @ foo বিন্যাস প্যাক / থেকে নির্ভরতা অ্যারের নিশ্চিত করতে npm ইনস্টল চেষ্টা করে না এবং GitHub থেকে এটা পেতে এবং যোগ করার জন্য --dry রানের ফ্ল্যাগ থাকে, এটি নিশ্চিত করে তোলে package.json এবং package- লক.জসন এনএমপি ইনস্টলের পরে অপরিবর্তিত থাকে ।


0

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

আমি এই ফাইলগুলি নোডেজ ফোল্ডারে তৈরি করেছি যেখানে এনপিএম এক্সিকিউটেবল পাওয়া যায়:

npm-.cmd:

@ECHO OFF
npm --registry https://registry.npmjs.org %*

npm-:

#!/bin/sh
"npm" --registry https://registry.npmjs.org "$@"

এখন, আমি যদি সাধারণ এনএমপি রেজিস্ট্রি (যদিও আমি ভিপিএন এর সাথে সংযুক্ত না হই) এর বিরুদ্ধে অপারেশন করতে চাই, আমি কেবল টাইপ করি npm-যেখানে আমি সাধারণত টাইপ করবnpm

এই কমান্ডটি পরীক্ষা করতে এবং প্যাকেজের জন্য রেজিস্ট্রিটি দেখতে, এই উদাহরণটি ব্যবহার করুন:

npm- view lodash

পুনশ্চ. আমি উইন্ডোতে আছি এবং এটি ব্যাশ, সিএমডি এবং পাওয়ারশেল-এ পরীক্ষা করেছি। আমিও

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