স্থানীয় মডিউলগুলি কীভাবে এনপিএম প্যাকেজ নির্ভরতা হিসাবে নির্দিষ্ট করা যায়


267

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

"express"     : "3.1.1"

আমি আমার নিজস্ব কোডটি নিয়মিতভাবে কাঠামোযুক্ত করতে চাই এবং প্যাকেজ.জসনের দ্বারা স্থানীয় (যা বর্তমানে আমি উপস্থিত ফাইল সিস্টেমের অর্থ) মডিউলগুলি ইনস্টল করতে চাই। আমি জানি যে আমি চালিয়ে একটি স্থানীয় মডিউল ইনস্টল করতে পারি:

npm install path/to/mymodule

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

আমি নিশ্চিত কহন একটি উপায় আছি "dependencies": {}কাঠামোই আমি এটি একটি ফাইল সিস্টেম পথ থেকে ইনস্টল করার জন্য চাই, কিন্তু কিভাবে জানি না।

অন্য কারও এই সমস্যা ছিল? ধন্যবাদ।


1
সত্যিই একটি ভাল প্রশ্ন। উপলব্ধি করা জন্য কোন বৈশিষ্ট্য সমতুল্য নেই দু: খিত package.jsonআমরা কি মধ্যে আছে Gemfileসে।
জারল

উত্তর:


403

npm install এখন এটি সমর্থন করে

npm install --save ../path/to/mymodule

mymoduleএটির জন্য কাজ করতে হবে তার নিজের একটি মডিউল হিসাবে কনফিগার করা package.jsonনোডজেএস মডিউল তৈরি করা দেখুন ।

এনএমপি ২.০ হিসাবে, স্থানীয় নির্ভরতা স্থানীয়ভাবে সমর্থিত। একটি অনুরূপ প্রশ্নের ড্যানিলোপোপের উত্তর দেখুন । আমি এখানে তার প্রতিক্রিয়াটি অনুলিপি করেছি কারণ ওয়েব অনুসন্ধানের ফলাফলগুলিতে এই প্রশ্নটি বেশ উঁচুতে রয়েছে।

এই বৈশিষ্ট্যটি এনপিএমের ২.০.০ সংস্করণে প্রয়োগ করা হয়েছিল। উদাহরণ স্বরূপ:

{
  "name": "baz",
  "dependencies": {
    "bar": "file:../foo/bar"
  }
}

নিম্নলিখিত পাথগুলির যে কোনওটি বৈধ:

../foo/bar
~/foo/bar
./foo/bar
/foo/bar

আপডেটগুলি সিঙ্ক করছে

যেহেতু npm installঅনুলিপি mymoduleকরা হয়েছে node_modules, mymoduleএর উত্সের পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে নির্ভর প্রকল্প দ্বারা দেখা যাবে না।

নির্ভরশীল প্রকল্পটি আপডেট করার জন্য দুটি উপায় রয়েছে

  • সংস্করণটি আপডেট করুন mymoduleএবং তারপরে ব্যবহার করুনnpm update : আপনি উপরের মতো দেখতে পাচ্ছেন, package.json"নির্ভরতা" এন্ট্রিতে কোনও সংস্করণ নির্দিষ্টকারী অন্তর্ভুক্ত হয় না কারণ আপনি স্বাভাবিক নির্ভরতার জন্য দেখতে পাবেন। পরিবর্তে, স্থানীয় নির্ভরতার জন্য, npm updateকেবলমাত্র এর দ্বারা নির্ধারিত হিসাবে সর্বশেষ সংস্করণটি ইনস্টল করা আছে তা নিশ্চিত করার চেষ্টা করে । এই নির্দিষ্ট সমস্যার ক্রিস্কেলির উত্তর দেখুন ।mymodulepackage.json

  • ব্যবহার করে পুনরায় ইনস্টল করুন npm installএটি mymoduleউত্সস্থলের পথে যা কিছু আছে তা ইনস্টল করবে , এমনকি এটি বয়স্ক হলেও বা বিকল্প শাখা চেক আউট করা আছে, যাই হোক না কেন।


2
এটি আমার পক্ষে কাজ করেছে। (আমি স্রেফ স্থানীয় আপেক্ষিক পথটি করেছি"mymodule":"file:mymoduledir"
ডন রোমি

72
npm install --save ../my-local-repo
ইভান রেভ

15
এবং প্রকল্পে এটি কীভাবে ব্যবহার করবেন? আমি এটির মতো বলার চেষ্টা করছি import { HelloWorld } from "my-test-lib";, তবে আমি "ক্যান্থ সন্ধানের মডিউল" ত্রুটিটি পেয়েছি। দয়া করে, কটাক্ষপাত করা stackoverflow.com/questions/46818083/...
Vitalii Vasylenko

6
@ লুচিওমোলাইনডো কীভাবে আপনি স্থানীয় মডিউলটি আমদানি করলেন তার সিনট্যাক্সটি ভাগ করতে পারবেন? ভিটাল্লির মতোই, আমি এর সাথে "ক্যান্ট মডিউলটি ভাল করতে পারি না" ত্রুটিটি পাচ্ছিimport { HelloWorld } from "my-test-lib";
স্ট্যান জেমস

7
এটি কোনও প্যাকেজকে উল্লেখ করার মতো কাজ করে না কারণ প্রকল্পে নির্ভরতা ইনস্টল করা হবে না
গ্লাস ক্যানন

44

দেখুন: প্যাকেজ.জসনে স্থানীয় নির্ভরতা

দেখে মনে হচ্ছে উত্তরটি npm link: https://docs.npmjs.com/cli/link


5
প্রকৃতপক্ষে এনপিএম লিঙ্কটি কেবলমাত্র সিমলিংকগুলি তৈরি করবে এবং স্থানীয় নির্ভরতা যুক্ত করতে প্যাকেজ.জসনকে পরিবর্তন করবে না
সেবাস্তিয়ান এইচ।

1
তবে এটি যদি না হয় symlinkতবে প্যারেন্ট প্রকল্পটি নির্ভরতা বাড়ার পরে পুনর্নির্মাণ করতে কীভাবে জানতে পারবে?
জেমি হাটবার

11

আমি শেষ পর্যন্ত একটি ঝরঝরে পথ খুঁজে পেলাম না তাই আমি ডাকা একটি ডিরেক্টরি তৈরি করতে গিয়েছিলাম local_modulesএবং তারপরে এই বাশস্ক্রিপ্টটি স্ক্রিপ্ট-> প্রিনস্টল-এ প্যাকেজ.জসনের সাথে যুক্ত করেছি>

#!/bin/sh
for i in $(find ./local_modules -type d -maxdepth 1) ; do
    packageJson="${i}/package.json"
    if [ -f "${packageJson}" ]; then
        echo "installing ${i}..."
        npm install "${i}"
    fi
done

5

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

ফিক্সের জন্য দুটি সহজ পদক্ষেপ প্রয়োজন

প্রথম:

npm install lib-manager --save-dev

দ্বিতীয়ত, এটি আপনার যুক্ত করুন package.json:

{  
  "name": "yourModuleName",  
  // ...
  "scripts": {
    "postinstall": "./node_modules/.bin/local-link"
  }
}

Https://www.npmjs.com/package/lib-manager এ আরও বিশদ । আশা করি এটি কাউকে সাহায্য করবে।


0

যদি আপনার অন্যান্য ফাইলগুলির পাশাপাশি নোড_মডিউলগুলিতে কেবলমাত্র আপনার মডিউলগুলি পূর্বেই ইনস্টল করা প্রকাশযোগ্য হয় তবে আপনি এটি এটি করতে পারেন:

// ./node_modules/foo/package.json
{ 
  "name":"foo",
  "version":"0.0.1",
  "main":"index.js"
}

// ./package.json
...
"dependencies": {
  "foo":"0.0.1",
  "bar":"*"
}

// ./app.js
var foo = require('foo');

আপনি গিটে নিজের মডিউলটি সঞ্চয় করতে এবং পিতামাত প্যাকেজ.জসনকে গিট থেকে নির্ভরতা ইনস্টল করতে বলতে পারেন: https://npmjs.org/doc/json.html#Git- URLs-as- নির্ভরতা


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

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