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


449

আমি ভালো কিছু কাজ করতে চান, তাই npm installএছাড়াও ইনস্টল package.jsonএর ../somelocallibবা আরো গুরুত্বপূর্ণ তার নির্ভরতা।

"dependencies": {
    "express": "*",
    "../somelocallib": "*"
}

উত্তর:


577

npm> = 2.0.0

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

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

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

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

স্থানীয় প্যাকেজটি উপসর্গ ( ) এ অনুলিপি করা হবে ।./node-modules

এনপিএম <২.০.০

somelocallibআপনার package.jsonস্বাভাবিক হিসাবে নির্ভরতা হিসাবে রাখুন :

"dependencies": {
  "somelocallib": "0.0.x"
}

তারপরে রান করুন npm link ../somelocallibএবং এনএমপি আপনি যে সংস্করণটি সিমলিংক হিসাবে কাজ করছেন তা ইনস্টল করবে ।

app@0.0.1 /private/tmp/app
└── somelocallib@0.0.1 -> /private/tmp/somelocallib

তথ্যসূত্র: লিঙ্ক (1)


3
আমরা কীভাবে এটি লিঙ্কমুক্ত করতে পারি?
আতাউররেহমান আসাদ

13
"এনপিএম লিঙ্ক" দিয়ে স্থানীয় প্যাকেজগুলি ইনস্টল করার খারাপ দিকটি হ'ল আপনি প্রচুর মডিউল নকল পান। আপনি যখন "মডিউল: সংস্করণ" বা "মডিউল: গিট-রেপো" দিয়ে আপনার নির্ভরতাগুলি তালিকাভুক্ত করেন, তখন এনএমপি ইনস্টল অ্যালগরিদম কোনও প্যাকেজ প্যাকেজে ইতিমধ্যে ইনস্টল থাকা একটি প্যাকেজ ইনস্টল করতে এড়ানো উচিত। সুতরাং "এনপিএম লিঙ্ক" এর সাথে, যদি আপনার মূল অ্যাপ্লিকেশনটি "async@0.8.0" এবং আপনার সমস্ত স্থানীয় প্যাকেজগুলি "async@0.8.0" উপর নির্ভর করে আপনি সমস্ত স্থানীয় প্যাকেজগুলি "async@0.8" ইনস্টল করে শেষ করবেন। 0 "মূল অ্যাপ্লিকেশনটির একই ইনস্টল করা" async "সংস্করণটি ব্যবহার করার পরিবর্তে। "এনপিএম ইনস্টল ফোল্ডার" ব্যবহার করে এটি ঘটে না।
পেড্রো ব্যালেস্টেরোস

3
@ পেড্রোবেলেস্টারস আপনি npm dedupএই সমস্যাটি সমাধান করতে ব্যবহার করতে পারেন । npmjs.org/doc/cli/npm-dedupe.html
ড্যানিলোপোপে

4
"স্থানীয় প্যাকেজটি অনুলিপি করা হবে ..." মনে হচ্ছে এমনটি মনে হয় না যে এনএমপি সংস্করণের আরও সাম্প্রতিক সংস্করণ। এখন, একটি syMLink তৈরি করা হয়।
tsauerwein

2
@danilopopeye per docs.npmjs.com/cli/install npm install <folder> বিবরণে বলা হয়েছে যে বর্তমান প্রকল্পের একটি
হারমান জে র্যাডটেক তৃতীয়

211

আপনার package.jsonসরাসরি স্থানীয় নোড মডিউল ইনস্টলেশন পাথ নির্দিষ্ট করা সম্ভব । ডক্স থেকে:

স্থানীয় পাথ

সংস্করণ ২.০.০ হিসাবে আপনি একটি স্থানীয় ডিরেক্টরিতে একটি প্যাকেজ ধারণ করে এমন একটি পথ সরবরাহ করতে পারেন। স্থানীয় পাথগুলি এই যে কোনও ফর্ম ব্যবহার করে npm install -Sবা সংরক্ষণ করা যেতে পারে npm install --save:

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

সেই ক্ষেত্রে এগুলি আপেক্ষিক পথে স্বাভাবিক করা হবে এবং আপনার সাথে যুক্ত করা হবে package.json। উদাহরণ স্বরূপ:

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

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


23
এনপিএম v.3 + এ, স্বাভাবিককরণ নিখুঁত, আপেক্ষিক নয় , তাই আপনি এরকম কিছু দেখতে পাবেন"bar": "file:///home/user/src/foo/bar"
রন ওয়ার্লেন

27
সংস্করণ বৃদ্ধি না করে কীভাবে স্থানীয় পাথ নির্ভরতা আপডেট করবেন?
বোহদান লিজানেটস

3
উপায় দ্বারা, এই কষ্ট সব ধরণের কারণ কখন এবং / অথবা আপনার নোড আবেদন dockerize হিসেবে মান চেষ্টা যদি node:onbuildচিত্রগুলি শুধুমাত্র বর্তমান ডিরেক্টরী কপি কিছু ছেড়ে, এবং এইভাবে ../foo
ডোনমার্টিন

4
এটিকে গিট + এসএসএসের সাথে একীভূত করার কোনও উপায় আছে যাতে গিট সংগ্রহস্থলের স্থানীয় কপি থাকতে পারে যে npm installসেখান থেকে ল্যানটিতে অন্য গিট সংগ্রহস্থল রয়েছে? আমি যখন উপরের এবং এনএমপি গিট + এসএসএস থেকে ইনস্টল করার চেষ্টা করি তখন এটি নোড_মডিউল ডিরেক্টরিতে দেখা যায় এবং গিট + এসএসএসের উপরে যাওয়ার চেষ্টা না করা সত্ত্বেও এটিই আমি শীর্ষ স্তরের প্যাকেজটি ইনস্টল করছি।
মাইকেল 23

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

87

এটি আমার পক্ষে কাজ করে।

আপনার প্যাকেজ.জসন ফাইলে নিম্নলিখিতটি রাখুন

"scripts": {
    "preinstall": "npm install ../my-own-module/"
}

4
"এনপিএম লিঙ্ক" ব্যবহারের প্রয়োজন নেই এমন পরামর্শের জন্য ধন্যবাদ
ItalyPaleAle

এটি .gitignoreমডিউল ফোল্ডারে সরিয়ে ফেলা হয়েছে, তৈরি হয়েছে .npmignoreএবং প্রথমবার এটি চালানোর পরে বাদে সমস্ত ফোল্ডারে urs 777 পুনরাবৃত্তভাবে প্রয়োগ করা হয়েছে node_modules। তবে হ্যাঁ, এটি নির্ভরতা ইনস্টল করে। এনপিএম সংস্করণ 1.4.14 ব্যবহার করে।
L0LN1NJ4

এটি ব্যবহার করা হয়েছে, তবে নোড_মডিউলগুলি নিয়ে গণ্ডগোলের পরিবর্তে আমি অ্যাপ_মডিউলগুলি ব্যবহার করেছি
ক্যাটালিন্ট

1
না কেন "dependencies": { "my-own-module": "file:../my-own-module" }?
বোহদান লিজানেটস

1
আমি এখানে @ বোহদানের সাথে একমত স্থানীয় নির্ভরতা ঠিক একই জিনিস করবে। ব্যবহারের সুবিধা npm linkহ'ল npm installআপনার নির্ভরতা আপ টু ডেট করার জন্য আপনাকে প্রতিবার করার দরকার নেই ।
52

30

আপনি যদি এটিকে আরও স্বয়ংক্রিয় করতে চান, কারণ আপনি সংস্করণ নিয়ন্ত্রণে আপনার মডিউলটি পরীক্ষা করে দেখছেন, এবং এনপিএম লিঙ্কটি মনে রেখে ডিভসের উপর নির্ভর করতে চান না, আপনি এটি আপনার প্যাকেজ.জসন "স্ক্রিপ্টস" বিভাগে যুক্ত করতে পারেন:

"scripts": {
    "postinstall": "npm link ../somelocallib",
    "postupdate": "npm link ../somelocallib"
  }

এটি হ্যাকির বাইরে অনুভব করে তবে এটি "কাজ" বলে মনে হচ্ছে। এই এনপিএম ইস্যুটি থেকে টিপস পেয়েছেন: https://github.com/npm/npm/issues/1558#issuecomment-12444454


15
কেন postinstallএবং এর postupdateপরিবর্তে preinstallএবং preupdate?
রাইটফোল্ড

1
আপনি কি আরও কিছু ব্যাখ্যা করতে পারেন এটি কি করে। অর্থাত্ যদি আমি একাধিক মূল ফোল্ডার (অর্থাত্ "মাল্টি-রুট ওয়ার্কস্পেস") দিয়ে কোনও vscode প্রকল্প সেটআপ করি তবে এটি কি গ্রাসকারী প্রকল্পগুলির জন্য অবিলম্বে মডিউল ফোল্ডারে পরিবর্তনগুলি প্রতিফলিত করতে সক্ষম হবে? - এই হ্যাক সম্পর্কে কি হয়?
বিভিডিবি

25

এভাবে আপনি স্থানীয় নির্ভরতা যুক্ত করবেন:

npm install file:src/assets/js/FILE_NAME

এটি এনপিএম থেকে প্যাকেজ.জসনে যুক্ত করুন:

npm install --save file:src/assets/js/FILE_NAME

সরাসরি এইভাবে প্যাকেজ.জসনে যুক্ত করুন:

....
  "angular2-autosize": "1.0.1",
  "angular2-text-mask": "8.0.2", 
  "animate.css": "3.5.2",
  "LIBRARY_NAME": "file:src/assets/js/FILE_NAME"
....

6

মাস্টার প্রকল্প

এখানে প্যাকেজ.জেসন আপনি মাস্টার প্রকল্পের জন্য ব্যবহার করবেন:

"dependencies": {
    "express": "*",
    "somelocallib": "file:./somelocallib"
}

এখন পর্যন্ত, ./somelocallibগ্রন্থাগার ফোল্ডারে রেফারেন্স মাস্টার প্রকল্পের package.json আপেক্ষিক যেমন

তথ্যসূত্র: https://docs.npmjs.com/files/package.json#local-paths


উপ প্রকল্প

আপনার গ্রন্থাগারের নির্ভরতাগুলি পরিচালনা করুন।

দৌড়ানোর পাশাপাশি npm install, আপনাকে দৌড়াতে হবে(cd node_modules/somelocallib && npm install)

এটি এনপিএম সহ একটি পরিচিত বাগ।

তথ্যসূত্র: https://github.com/npm/npm/issues/1341 (আরও একটি আপ-টু-ডেট রেফারেন্স চাইছেন)


ডকারের জন্য নোটস

আপনার মাস্টার package.lockএবং আপনার পরীক্ষা করুনsomelocallib/package.lock আপনার উৎস কোডের ব্যবস্থাপক মধ্যে।

তারপরে আপনার ডকফাইফাইল ব্যবহারে:

FROM node:10
WORKDIR /app
# ...
COPY ./package.json ./package-lock.json ./
COPY somelocallib somelocallib
RUN npm ci
RUN (cd node_modules/zkp-utils/ && npm ci)
# ...

(cd A && B)অপারেশনকে আদর্শবান করে তুলতে আমি আমার নির্মাণগুলিতে প্রথম বন্ধনী ব্যবহার করি ।


2

আমি জানি যে npm install ../somelocallibকাজ করে।

তবে, আপনি প্রশ্নের মধ্যে যে সিনট্যাক্সটি দেখান তা থেকে কাজ করবে কিনা তা আমি জানি না package.json...

দুর্ভাগ্যক্রমে, ডক মনে হয় কেবলমাত্র নির্ভরতা হিসাবে ইউআরএল উল্লেখ করেছে।

file:///.../...tar.gzএকটি জিপড স্থানীয় লিবকে নির্দেশ করে চেষ্টা করুন ... এবং এটি কাজ করে কিনা তা আমাদের জানান us


1
আমি "নির্ভরতা": some "সামোডিউল": "ফাইল: ///./ অভ্যন্তরীণ_মডিউলস / সামোডিউল" package প্যাকেজ.জসনে যোগ করি। এটি কাজ করে না। ত্রুটি কোডটি "এনপিএম ERR! কোড E404"।
জেফরি

2

এটি আমার জন্য কাজ করেছে: প্রথমে, নিশ্চিত হয়ে নিন যে এনপিএম ডিরেক্টরিতে সঠিক ব্যবহারকারী রয়েছে

sudo chown -R myuser ~/.npm
sudo chown -R myuser /usr/local/lib/node_modules

তারপরে আপনার প্যাকেজ.জসনে ডিরেক্টরিটি লিঙ্ক করুন

"scripts": {
 "preinstall": "npm ln mylib ../../path/to/mylib"
}, 
"dependencies": {
  "mylib" : "*"
}

2
এক্সপি এন.ইউইকিপিডিয়া.আর.উইকি / এনটিএফএস_সাইম্বোলিক_লিংক থেকে উইন্ডোজে প্রতীকী লিঙ্কগুলি সম্ভব । প্রশাসক হিসাবে কমান্ড লাইনটি খুলুন, তারপরে চালান npm install
ঘাসের চাপড়া


2

কৌতূহলী ..... কমপক্ষে উইন্ডোজে (আমার এনপিএমটি কিছু 3. কিছু) আমার যা করা দরকার তা ছিল:

"dependencies": {
 "body-parser": "^1.17.1",
 "module1": "../module1",
 "module2": "../module2",

যখন আমি npm install ../module1 --saveএটি করি তখন ডকুমেন্টেশন অনুযায়ী আপেক্ষিক নয় এবং পরম পাথের ফলাফল হয়।

আমি আরও কিছুটা গোলমাল করেছি এবং দৃ determined়সংকল্পবদ্ধ যে ../xxxযথেষ্ট ছিল।

বিশেষত, আমার কাছে স্থানীয় নোড মডিউলগুলি পরীক্ষা করার জন্য ড: \ বিল্ড \ মডিউল 1, ডি: \ বিল্ড \ মডিউল 2 এবং আমার নোড প্রকল্প (অ্যাপ্লিকেশন) d: \ বিল্ড \ নোড অ্যাপে রয়েছে।

ইনস্টল করতে, আমি:

d:\build\module1> rmdir "./node_modules" /q /s && npm install
d:\build\module2> rmdir "./node_modules" /q /s && npm install
d:\build\nodeApp> rmdir "./node_modules" /q /s && npm install

মডিউল 1 এর প্যাকেজ.জসনের "মডিউল 2": "../module2" এর নির্ভরতা রয়েছে; মডিউল 2 এর কোনও স্থানীয় নির্ভরতা নেই; নোড অ্যাপের নির্ভরতা "মডিউল 1": "../module1" এবং "মডিউল 2": "../module2"।

নিশ্চিত না যে এটি কেবলমাত্র 3 টি ফোল্ডার (মডিউল 1, মডিউল 2 এবং নোড অ্যাপ) একই স্তরে বসে থেকে এটি আমার জন্য কাজ করে কিনা .......


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