আমি নোডে কীভাবে বিশ্বব্যাপী মডিউলগুলি আমদানি করব? আমি পেয়েছি "ত্রুটি: <মডিউল> মডিউলটি খুঁজে পাচ্ছি না"?


145

আমি ম্যাক ওএসএক্স লায়নটিতে নোড সেটআপ করার চেষ্টা করছি। এটি সব ঠিকঠাক বলে মনে হচ্ছে, তবে আমি আমার বিশ্বব্যাপী মডিউল ফোল্ডার থেকে কোনও মডিউল আমদানি করে বলে মনে করতে পারি না। আমি ত্রুটি পেয়েছি,

Error: Cannot find module <module>

যদি আমি এটি চালাই : node -e require.paths, আমি যে প্রতিক্রিয়া পাই তা হ'ল:

[ '/usr/local/lib/node_modules',
  '/Users/Me/.node_modules',
  '/Users/Me/.node_libraries',
  '/usr/local/Cellar/node/0.4.12/lib/node' ]

কোনটি সঠিক, আমার মডিউলগুলি সত্যই / usr / স্থানীয় / lib / নোড_মডিউলগুলিতে ইনস্টল করা আছে। আমি যখন চেষ্টা করি এবং কোনও স্ক্রিপ্ট রান করি, তবে আমি এটি পাচ্ছি:

Error: Cannot find module 'socket.io'
    at Function._resolveFilename (module.js:326:11)
    at Function._load (module.js:271:25)
    at require (module.js:355:19)
    at Object.<anonymous> (/Users/Me/node/server.js:2:10)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
    at Array.<anonymous> (module.js:430:10)
    at EventEmitter._tickCallback (node.js:126:26)

আমার .বাশ_ প্রোফাইলটি দেখতে এমন দেখাচ্ছে:

export PATH=/usr/local/mysql/bin:$PATH
export NODE_PATH=/usr/local/lib/node_modules
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:/usr/local/mysql/lib/"

সত্যিই কিছু সাহায্যের প্রশংসা করবে, কেন আমি কোনও লাইব্রেরি আমদানি করতে পারি না তা আমার কোনও ধারণা নেই।


1
আপনি জানেন যে এটি ঠিক কাজগুলি করার পছন্দসই উপায় নয়, তাই না?
thejh

1
আপনি বিস্তারিত বলতে পারেন? আপনার অর্থ কি আমার গ্লোবাল ফোল্ডারে লাইব্রেরি ইনস্টল করা উচিত নয়?
হানপান

3
@ হানপান: পছন্দের উপায়টি হল স্থানীয়ভাবে প্রয়োজনীয় () এর মাধ্যমে আপনি যে মডিউলগুলি ব্যবহার করতে চান তা ইনস্টল করা।
thejh

1
একটি আরও ভাল এবং আরও আপডেট হওয়া উত্তর (যা নির্ভর করে না npm link) এখানে পাওয়া যাবে: stackoverflow.com/a/15646750/2671392
GGG

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

উত্তর:


116

আপনি যদি এনএমপি> = 1.0 ব্যবহার করেন তবে npm link <global-package>আপনি ইতিমধ্যে বিশ্বব্যাপী ইনস্টল করা প্যাকেজের স্থানীয় লিঙ্ক তৈরি করতে ব্যবহার করতে পারেন । ( ক্যাভিয়েট: ওএস অবশ্যই সিমলিংক সমর্থন করবে। )

তবে এটি এর সমস্যা ছাড়া আসে না।

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

বিকল্প হিসাবে, আপনি স্থানীয়ভাবে এবং বিশ্বব্যাপী প্যাকেজ ইনস্টল করতে পারেন।

অতিরিক্ত তথ্যের জন্য, দেখুন


69
আমি এটি পড়ছি এবং আমার চোখকে বিশ্বাস করতে পারি না। সুতরাং আমি যদি ইনস্টল করি, এক্সপ্রেস বলি এবং তারপরে এক্সপ্রেসের শীর্ষে 20 টি প্রকল্প তৈরি করতে চান, তবে প্রতিটি প্রজেক্ট ফোল্ডারে, বারবার ও পরে, আমার জন্য এটি 20 বার ইনস্টল করা দরকার? প্যাকেজ পরিচালকদের সাথে আমার খুব বেশি অভিজ্ঞতা নেই তবে এই
ধরণের সাফল্য

25
এটি সঠিক, এবং আপনি যদি এটি সম্পর্কে চিন্তা করেন তবে এটি অর্থবোধ করে। স্থানীয়ভাবে আপনার নির্ভরতা পরিচালনা করা সবকিছুকে স্ব-অন্তর্ভুক্ত রাখে এবং আপনাকে যে কোনও প্রকল্পের জন্য নির্ভরতার একটি নির্দিষ্ট সংস্করণ নির্দিষ্ট করার অনুমতি দেয় (উদাহরণস্বরূপ প্রকল্প ফু এর জন্য এক্সপ্রেস ২.x প্রয়োজন হয়, যখন প্রকল্প বারটি এক্সপ্রেস ৩ বিটা ব্যবহার করতে পারে)।
গ্রাহামব

43
আমি এর যুক্তিটি কিছু সময়ের জন্য বুঝতেও সংগ্রাম করেছি, তবে আমার রুবি বন্ধুরা বিশ্বব্যাপী প্যাকেজ আপডেটের সাথে লড়াই করার পরে, রত্নগুলি সম্পর্কে বিতর্ক করে এবং প্রায়শই কেবল আপগ্রেড হয় না, আমি স্বীকার করে নিয়েছি যে স্থানীয়ভাবে নির্ভরতা ইনস্টল করা একমাত্র বুদ্ধিমান উপায় way প্যাকেজ পরিচালনার
টিমোকসলে

3
আমি এই পরিস্থিতি এবং স্থির-লিঙ্কিং বনাম গতিশীল-সংযোগকারী গ্রন্থাগারগুলির মধ্যে একটি সমান্তরাল আঁকতে চাই কারণ এটি সফ্টওয়্যার বিতরণের সাথে সম্পর্কিত। বিবেচনা করুন যে আইওএস অ্যাপ স্টোরে বিতরণ করা প্রায় সমস্ত অ্যাপ্লিকেশনগুলিকে অবশ্যই আইওএস এসডিকে সরবরাহ না করে নির্ভরতার সাথে সংযুক্ত থাকতে হবে। কেন এটি করা হয়? গ্লোবাল নির্ভরতা নরক একটি খুব বাস্তব জিনিস।
স্টিভেন লু

1
এটি আমার বোধগম্য যে npmক্যাশে (যা বাস করে ~/.npm) আপনার বিভিন্ন স্থানে পুনরায় ইনস্টলেশন প্রক্রিয়াটি সমীকরণীয় করে তুলবে।
স্টিভেন লু

85

NODE_PATHমডিউল অনুসন্ধানের পথে অতিরিক্ত ডিরেক্টরি নির্দিষ্ট করার জন্য নোড.জেএস পরিবেশগত পরিবর্তনশীল ব্যবহার করে। কমান্ডের npmসাথে বিশ্বব্যাপী মডিউলগুলি কোথায় সংরক্ষণ করা হয়েছে তা জানাতে আপনি নিজেই ব্যবহার করতে পারেন npm root -g। সুতরাং এই দুটি একসাথে রেখে, আপনি নিশ্চিত করতে পারেন যে বিশ্বব্যাপী মডিউলগুলি নিম্নলিখিত কমান্ডের সাথে আপনার অনুসন্ধানের পথে অন্তর্ভুক্ত রয়েছে (লিনাক্স-ইশ-এ)

export NODE_PATH=$(npm root --quiet -g)


3
NODE_PATHপরিবেশ পরিবর্তনশীল ইঙ্গিত জন্য ধন্যবাদ । যে অনেক সাহায্য!
rekire

7
এটি শীর্ষ মন্তব্য হওয়া উচিত
অ্যাডাম প্রেক্স

আমি সেট করতে ছিল NODE_PATHসমতুল্য posix পথে MSYS2 উপর npm কাজ করা। ধন্যবাদ.
জয়স বাবু

উইন্ডোজ এবং গিট ব্যাশের সাথেও কাজ করে। পারফেক্ট। :-)
inf3rno

এটি আপনার .node_modulesফোল্ডারটিকে সন্ধানযোগ্য করে তোলে , তবে মডিউলগুলি ব্যবহার করে আমদানি করার জন্য require()সেগুলি আপনার স্থানীয় প্রকল্প ডিরেক্টরিতে (অথবা বিকল্পভাবে, লিঙ্কযুক্ত ব্যবহার করে npm link) ইনস্টল করা উচিত । প্রকল্পগুলিতে গ্লোবাল মডিউলগুলি আমদানি করা যায় না, সেখান থেকে কেবল বাইনারি / স্ক্রিপ্টগুলি চালানো যেতে পারে।
প্রহ্লাদ ইয়েরি

65

আপনি আপনার প্রকল্পের ফোল্ডারে আপনার বৈশ্বিক প্যাকেজের একটি প্রতীকী লিঙ্ক তৈরি করতে এনপিএম লিঙ্কটি ব্যবহার করতে পারেন।

উদাহরণ:

$ npm install -g express
$ cd [local path]/project
$ npm link express

এটি যা করে তা হ'ল একটি স্থানীয় নোড_মডিউলগুলি ফোল্ডার তৈরি করা এবং তারপরে একটি সিমিলিংক এক্সপ্রেস তৈরি করা -> [গ্লোবাল ডিরেক্টরি] / নোড_মডিউল / এক্সপ্রেস যা এরপরে সমাধান করা যেতে পারে require('express')


এটি কি ক্রস-ওএস সামঞ্জস্যপূর্ণ?
আপক্রিক

উইন্ডোজের নতুন সংস্করণগুলি এই সংস্করণটি থেকে এটি সমর্থন করে: github.com/npm/npm/commit/… পুরানো উইন্ডোজ সংস্করণগুলির জন্য npmjs.com / প্যাকেজ / এনপিএম- সংযোগ
অ্যালেক্স

22

নীচের মতো বিশ্বব্যাপী যে কোনও প্যাকেজ ইনস্টল করুন:

$ npm install -g replace  // replace is one of the node module.

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

কারণ প্রয়োজনীয়তার সাথে আপনি কেবলমাত্র স্থানীয় মডিউলগুলি ব্যবহার করতে পারেন যা আপনার নোড মডিউল ফোল্ডারে উপস্থিত।

এখন গ্লোবাল মডিউলটি ব্যবহার করতে আপনার নীচের কমান্ডটি ব্যবহার করে নোড মডিউল পাথের সাথে এটি লিঙ্ক করা উচিত।

$ npm link replace

এখন ফিরে যান এবং আপনার নোড মডিউল ফোল্ডারটি দেখুন এখন আপনি সেখানে প্রতিস্থাপন মডিউল দেখতে সক্ষম হবেন এবং এটি আপনার স্থানীয় নোড মডিউলটির সাথে যুক্ত হওয়ার কারণে আপনার অ্যাপ্লিকেশনটিতে প্রয়োজনীয় ('প্রতিস্থাপন') ব্যবহার করতে পারবেন।

যদি আরও কোনও স্পেসিফিকেশন প্রয়োজন হয় তবে প্লিজ আমাকে জানান।


14

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

require('/path/to/global/node_modules/the_module');

আমার ম্যাক এ, আমি এটি ব্যবহার করি:

require('/usr/local/lib/node_modules/the_module');

আপনার গ্লোবাল মডিউলগুলি কীভাবে খুঁজে পাবেন? -> এনপিএম কোথায় প্যাকেজ ইনস্টল করে?


7

আপনার গ্লোবালকে নির্দেশ করতে এনভায়রনমেন্ট ভেরিয়েবল NODE_PATH সেট করা node_modules ফোল্ডারে ।

উইন্ডোজ or বা উচ্চতর পথে %AppData%\npm\node_modulesইউনিক্সের মতো কিছু হতে পারে/home/sg/.npm_global/lib/node_modules/ তবে এটি ব্যবহারকারী কনফিগারেশনের উপর নির্ভর করে।

আদেশ npm config get prefix সঠিক পথটি খুঁজে পেতে সাহায্য করতে পারে।

ইউনিক্স সিস্টেমে আপনি নিম্নলিখিত কমান্ডটি দিয়ে এটি সম্পাদন করতে পারেন:

export NODE_PATH=`npm config get prefix`/lib/node_modules/

0

আমি ডকার ব্যবহার করছি আমি এমন একটি ডকার ইমেজ তৈরির চেষ্টা করছি যা আমার সমস্ত নোড নির্ভরতা ইনস্টল করেছে, তবে আমার স্থানীয় অ্যাপ্লিকেশন ডিরেক্টরিটি কনটেইনার রান টাইমে (কোনও নোড_মডিউল ডিরেক্টরি বা লিঙ্ক দিয়ে দূষিত না করে) ব্যবহার করতে পারি। এটি এই পরিস্থিতিতে সমস্যার সৃষ্টি করে। আমার কার্যতালিকাটি হ'ল সঠিক পথ থেকে যেখানে মডিউলটি প্রয়োজন (যেমন / '/ usr / স্থানীয় / lib / নোড_মডিউল / সকেট.ও')


-1

require.paths অবচয় করা হয়।

আপনার প্রকল্প ফোল্ডারে যান এবং টাইপ করুন

npm install socket.io

এটি স্থানীয় ./node_modules ফোল্ডারে ইনস্টল করা উচিত যেখানে নোড এটি সন্ধান করবে।

আমি আমার জিনিস এইভাবে রাখি:

cd ~/Sites/
mkdir sweetnodeproject
cd sweetnodeproject
npm install socket.io

একটি app.js ফাইল তৈরি করুন

// app.js
var socket = require('socket.io')

এখন আমার অ্যাপ চালান

node app.js

আপনি npm >= 1.0এবং ব্যবহার করছেন তা নিশ্চিত করুন node >= 4.0


8
তিনি বিশ্বব্যাপী ইনস্টলড এনপিএম প্যাকেজগুলি ব্যবহার করার বিষয়ে জিজ্ঞাসা করছেন।
আপক্রিক

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