এনপিএম ইনস্টল করুন এবং কাঁটাযুক্ত গিথুব রেপো তৈরি করুন


126

এটি একেবারে নতুন প্রশ্ন নয়, তবে আমি এখনই বেশ ভাল কিছু খুঁজছিলাম এবং এর সমাধান খুঁজতে আমার সমস্যা হচ্ছে।

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

npm install https://github.com/myRepo/angular-translate
npm install https://github.com/myRepo/angular-translate/archive/master.tar.gz

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

-angular-translate
   .npmignore 
   .nvmrc
    CHANGELOG.md 
    package.json
    etc

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

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

উত্তর:


139

চেষ্টা করুন npm install <ghusername>/<repoName>, <ghUsername>আপনার গিটহাব ব্যবহারকারীর নাম কোথায় (এটি ব্যতীত @) এবং <repoName>সংগ্রহস্থলের নাম। এটি সঠিকভাবে এটি ইনস্টল করা উচিত। আপনার সম্ভবত নির্ভরতা বাঁচাতে আপনি ইনস্টল কমান্ডের সাহায্যে পতাকা --saveবা --save-devপতাকা ব্যবহার করতে চাইবেন package.json

যদি এটি সঠিকভাবে কাজ করে না, আপনার .npmignoreফাইলের সামগ্রীগুলি পরীক্ষা করুন check

ইনস্টল কমান্ডটি দীর্ঘ সময় নিলে আতঙ্কিত হবেন না; গিট সংগ্রহস্থল থেকে ইনস্টল করা এনপিএম রেজিস্ট্রি থেকে ইনস্টল করার চেয়ে ধীর slow


সম্পাদনা:

আপনার সমস্যাটি হ'ল আপনার ক্ষেত্রে, dist/রেপুর প্রতি প্রতিশ্রুতিবদ্ধ নয় (যেহেতু এটি এর মধ্যে রয়েছে .gitignore)। আসল কোডটি এখানেই বাস করে। প্যাকেজটি এনএমপি রেজিস্ট্রি প্রকাশের আগে dist/ফাইলগুলি থেকে তৈরি করা হয় src/, তবে dist/কখনও রেপোতে প্রতিশ্রুতিবদ্ধ হয় না।

এটি কুৎসিত, তবে dist/এক্ষেত্রে আপনাকে এটিকে অপসারণ করতে হবে .gitignoreএবং তারপরে চালাতে হবে:

npm run build
git add .
git commit
git push

(নিশ্চিত হয়ে নিন যে আপনি npm installপ্রথম রান করেছেন )

তারপরে আপনি গিথব থেকে ইনস্টল করতে সক্ষম হবেন।

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


2
হ্যাঁ, এটি বেশ সমাধান ছিল। এছাড়াও একটি এনএমপি ইনস্টল করতে হয়েছিল এবং গ্রান্টফিলকে কিছুটা সংশোধন করতে হয়েছিল, তবে এটি এটি কার্যকর হয়েছে। আপনার সহায়তার জন্য ধন্যবাদ :)
hughesjmh

2
আনইনগোর ডিস্ট ছাড়া অন্য কিছু করার সত্যিই কি উপায় নেই? আমি মূল রেপোতে পিআর করতে চাই, তবে দুরের সাথে, তিনি কি এটি পছন্দ করবেন না?
কা মোক

7
@ কেমোক আমার মতে অন্য একটি বিকল্প হ'ল, package.jsonআপনার কাঁটাচলার ফাইলের নীচে scripts, নাম পরিবর্তন prepublishকরুন prepare। মনে হয় যখন npm installবা npm install github:user_name/fork_name --save(এবং সুতার জন্য একই) কার্যকর হয় এটি prepareস্ক্রিপ্টের মধ্যে যা চালায় তাও । এটি ধরে নেওয়া prepublishহচ্ছে এই প্যাকেজের স্ক্রিপ্টটি বিল্ড ফাইলগুলি তৈরি করে, যা সাধারণত হয়।
ডেভিডফرانসিস্কো

5
এবং আপনার যদি একটি নির্দিষ্ট শাখা দরকার হয়,npm install <ghusername>/<repoName>#branchName
DrMeers

2
@ রায়ানজিম আপনি ভুল। গিট থেকে ইনস্টল করা যতক্ষণ না এটি সঠিকভাবে সেটআপ হয় ততক্ষণ কাজ করে। " docs.npmjs.com/cli/install " যদি ইনস্টল করা প্যাকেজটিতে কোনও prepareস্ক্রিপ্ট থাকে তবে এটি dependenciesএবং devDependenciesইনস্টল হবে এবং প্যাকেজটি প্যাকেজড ও ইনস্টল করার আগে প্রস্তুত স্ক্রিপ্টটি চালানো হবে। "
ক্যামেরন ট্যাকলিন্ড

15

যারা এনপিএম 5 ব্যবহার করছেন তাদের জন্য আপডেট করুন:

এনপিএম @ 5 হিসাবে, prepublishস্ক্রিপ্টগুলি হ্রাস করা হয়।

prepareনির্মাণের পদক্ষেপগুলির prepublishOnlyজন্য এবং কেবল আপলোডের জন্য ব্যবহার করুন ।

আমি "prepare": "npm run build"স্ক্রিপ্টগুলিতে একটি যুক্ত করার সাথে আমার সমস্ত সমস্যাগুলি স্থির করেছি।


এটি আমার পক্ষেও কাজ করেছিল (আমি কেবল তৈরি একটি কাঁটাচামচায়) - ধন্যবাদ! আমি অবাক হই ... সমস্ত প্যাকেজগুলি কেবল এই স্ক্রিপ্ট কনফিগারেশনটিকে ডিফল্ট হিসাবে অন্তর্ভুক্ত করে না কেন? প্যাকেজ লেখকরা কেবল এনএমপি থেকে তাদের প্যাকেজ ইনস্টল করার ক্ষেত্রে এবং গিট রেপো থেকে এটি ইনস্টল করার ক্ষেত্রে বিবেচনা করে না? সুতরাং এগুলি কেবল ম্যানুয়ালি চলতে অভ্যস্ত npm run buildএবং npm run publishতারা যদি কোনও দিন গিটের মাধ্যমে রেপো ইনস্টল করার চেষ্টা না করে তবে কোনও সমস্যা বা ব্যথার মুখোমুখি হন না?
টাইলার রিক

9

এনপিএমজেএস.কম-এ প্রকাশিত কোডটি প্রায়শই প্যাকেজের রিপোজিটরিতে থাকে না। জাভাস্ক্রিপ্ট উত্স ফাইলগুলিকে গ্রন্থাগারে সাধারণ ব্যবহারের জন্য বোঝানো সংস্করণগুলিতে "সংকলন" করা সাধারণ is এটি সাধারণত এনএমপিজেএস.কম-এ প্রকাশিত হয়।

এটি এতটাই সাধারণ যে ( ) প্রকাশের আগেnpm "বিল্ড" পদক্ষেপটি স্বয়ংক্রিয়ভাবে চালানো এটির একটি বৈশিষ্ট্য । এটি মূলত বলা হয়েছিল । দেখে মনে হচ্ছে এনএমপি মনে করেছিল যে কোনও স্ক্রিপ্টটি চালানো সহজ হবে কারণ এটি একটি বিকাশ পরিবেশকে আরম্ভ করার মানক উপায় ছিল।npm publishprepublishprepublishnpm install

এর ফলে সমাজে কিছু বড় বিভ্রান্তির সৃষ্টি হয়েছিল। এটি সম্পর্কে গিথুব সম্পর্কে খুব দীর্ঘ সমস্যা আছে।

শেষ পর্যন্ত, পুরানো আচরণ পরিবর্তন না করার প্রয়াসে তারা আরও দুটি স্বয়ংক্রিয় স্ক্রিপ্ট যুক্ত করার সিদ্ধান্ত নিয়েছে: prepublishOnlyএবং prepare

prepublishOnlyআপনি যা প্রত্যাশা করেন তা করে এটি চালানো হয় না npm install। অনেক প্যাকেজ রক্ষণাবেক্ষণকারী কেবল অন্ধভাবে এটিতে স্যুইচ করেছেন।

তবে এই সমস্যাটিও ছিল যে লোকেরা প্যাকেজগুলির সংস্করণ বিতরণ করতে এনএমপিজেএস.কমের উপর নির্ভর করতে চায় না। গিট সংগ্রহস্থলগুলি প্রাকৃতিক পছন্দ ছিল। তবে গিটে "সংকলিত" ফাইল প্রতিশ্রুতিবদ্ধ না করাই সাধারণ অভ্যাস। prepareহ্যান্ডেল করার জন্য এটিই যুক্ত করা হয়েছিল ...

prepare সঠিক উপায়

যদি আপনার সোর্স ফাইল সহ একটি সংগ্রহস্থল থাকে তবে এটি ব্যবহারের জন্য "বিল্ড" পদক্ষেপের প্রয়োজন হয়,
prepareআপনি সমস্ত ক্ষেত্রে যা চান তা ঠিক করেন (এনপিএম 4)।

prepare: প্যাকেজটি প্যাকড এবং প্রকাশিত হওয়ার আগে, npm installকোনও যুক্তি ছাড়াই এবং স্থানীয়ভাবে গিট নির্ভরতা ইনস্টল করার পরে উভয়ই চালান ।

এমনকি আপনার বিল্ড নির্ভরতাও এতে রাখতে পারেন devDependenciesএবং prepareকার্যকর করার আগে সেগুলি ইনস্টল করা হবে ।

এখানে আমার প্যাকেজের উদাহরণ রয়েছে যা এই পদ্ধতিটি ব্যবহার করে।


সমস্যা .gitignore

এই বিকল্পটিতে একটি সমস্যা রয়েছে যা অনেক লোককে পেয়ে যায়। নির্ভরতা প্রস্তুত করার সময়, এনএমপি এবং সুতা কেবলমাত্র সেই বিভাগগুলিতে রাখবে যা filesবিভাগে তালিকাবদ্ধ রয়েছে package.json

কেউ দেখতে পাবে যে filesসমস্ত ফাইলের ডিফল্ট অন্তর্ভুক্ত রয়েছে এবং তারা মনে করে যে সেগুলি সম্পন্ন হয়েছে। কি সহজে মিস করে .npmignore বেশিরভাগ অগ্রাহ্য filesনির্দেশ এবং , যদি .npmignoreবিদ্যমান নয়, .gitignoreপরিবর্তে ব্যবহার করা হয়।

সুতরাং, আপনার যদি নিজের বিল্ড করা ফাইলগুলি .gitignoreকোনও বুদ্ধিমান ব্যক্তির মতো তালিকাভুক্ত করা থাকে এবং অন্য কিছু না করেন prepareতবে মনে হচ্ছে এটি ভেঙে যাবে

আপনি যদি filesকেবল নির্মিত ফাইলগুলি অন্তর্ভুক্ত করতে বা কোনও খালি যুক্ত করা ঠিক করেন তবে .npmignoreআপনি সব প্রস্তুত।

আমার সুপারিশটি হ'ল files(বা, বিপরীতভাবে .npmignore) সেট করা যাতে প্রকৃতপক্ষে প্রকাশিত কেবলমাত্র ফাইলগুলি প্রকাশিত প্যাকেজটির ব্যবহারকারীদের প্রয়োজন। তবে, প্রকাশিত প্যাকেজগুলিতে বিবিধ উত্সগুলি অন্তর্ভুক্ত করার দরকার নেই।


আসল উত্তর: https://stackoverflow.com/a/57503862/4612476


1
POSTINSTALL.i এর পরিবর্তে আমার জন্য প্রস্তুতি নেওয়া হয়েছে I প্রস্তুতির জন্য এনপিএম রান বিল্ডটি চালিয়েছে।
মিলিণ্ড

6

@ রায়ানজিমের দুর্দান্ত উত্তরটি বন্ধ করে দেওয়া, postinstall করা অবশ্যই জন্য একটি কার্যকর বিকল্প option

হয় নিম্নলিখিতগুলির মধ্যে একটি করুন:

  1. স্ক্রিপ্টগুলিতে একটি পোস্ট ইনস্টল উপাদান যুক্ত করতে আপনার জালানো রেপোতে প্যাকেজ.জেসন আপডেট করুন। এখানে, সংকলিত আউটপুট (পছন্দসই) পেতে আপনার যা প্রয়োজন তা চালান।
  2. আপনার প্যাকেজ.জসন আপডেট করুন এবং নোড_মডিউলগুলিতে প্রয়োজনীয় ডিরেক্টরি আপডেট করে এমন একটি পোস্ট ইনস্টল যুক্ত করুন।

যদি আপনি অন্য ব্যক্তির ভান্ডারটিকে কাঁটাচামচ করেন, তবে সমস্যাটি উত্থাপন করার জন্য এটি উত্থাপনযোগ্য হতে পারে যে গিটহাবের মাধ্যমে তাদের প্যাকেজটি ইনস্টল করা কাজ করে না কারণ এটি স্ক্রিপ্ট তৈরির প্রয়োজনীয় উপায় সরবরাহ করে না। সেখান থেকে, তারা পোস্ট-ইনস্টল দিয়ে এটি সমাধানের জন্য PR টি গ্রহণ করতে পারে, বা তারা এটি প্রত্যাখ্যান করতে পারে এবং আপনি # 2 করতে পারেন।


আপনি কীভাবে # 2 কীভাবে করবেন তা ব্যাখ্যা করতে বা কোনও সংস্থান রাখতে পারেন? গিটারপোতে কেবলমাত্র এসসিআর ডিস্ট না থাকায় আমাকে এনপিএল ইনস্টলের পরে কোন আদেশগুলি চালানো দরকার
ড্যানিয়েল

1
@ ড্যানিয়েল দুঃখিত, আমি অতীতে যেখানে এটি করেছি তার প্রসঙ্গে মনে করার চেষ্টা করছি। আমি মনে করি যে # 2 দ্বারা আমি আপনার মূল প্যাকেজগুলিতে একটি পোস্ট-ইনস্টল পদক্ষেপ যুক্ত করতে চাইছি j জেসন যা শীর্ষ উত্তরের জন্য পদক্ষেপগুলি চালিত করবে, তাই "postinstall": "cd node_modules/scrape-twitter/ && npm install && npm run build"আপনার অ্যাপ্লিকেশনটি চালানোর আগে প্যাকেজটি যাতে আপনার সমস্যার কারণ হয়ে থাকে সেটিকে নিশ্চিত করার জন্য এই লাইনে কিছু রয়েছে । যেমনটি বলা হয়েছে, যদিও আমি নিজের ব্যবহারকারীর কাছে রেপো কাঁটাচামচ করা, প্যাকেজে নিজেই পোস্ট-ইনস্টল যুক্ত করা এবং এটি আমার অ্যাপ্লিকেশনটিতে ব্যবহার করা পছন্দ করি।
মাইক বি

আমি মনে করি প্রস্তুতিতে যোগ করা পছন্দ করা উচিত (@ সাইমন এর উত্তর), কারণ যদি এনপিএম থেকে ইনস্টল করা হয় তবে আপনাকে কোনও অতিরিক্ত বিল্ডিং করার প্রয়োজন হবে না কারণ এতে ইতিমধ্যে কোনও ডিস্ট / ডির অন্তর্ভুক্ত থাকা উচিত। Docs.npmjs.com/misc/scriptts দেখুন : "প্রস্তুত করুন: প্যাকেজটি প্যাক করা এবং প্রকাশিত হওয়ার আগে উভয় চালান ... এবং গিট নির্ভরতা ইনস্টল করার সময়"
টাইলার রিক ২

postinstallসঠিক সমাধানের এক ধাপ ছোট। শুধু ব্যবহার prepare। এটি 2020
ক্যামেরন ট্যাকলাইন্ড

2

কমান্ডটি ব্যবহার করুন npm install git+https://git@github.com/myRepo/angular-translate.git। ধন্যবাদ।

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