আমি জানি এটি একটি পুরানো প্রশ্ন, তবে semverকোনও preinstallস্ক্রিপ্টের সাহায্যে কিছু সংস্করণ চেক করার চেষ্টা করার সময় আমি এটিকে ছুঁড়েছি package.json। যেহেতু আমি জানতাম যে আমি ইনস্টল হওয়া কোনও স্থানীয় মডিউলগুলির উপর নির্ভর করতে পারি না, তাই আমি semverএটি বিশ্বব্যাপী node_modulesফোল্ডারটি থেকে প্রয়োজনীয় হিসাবে ব্যবহার করেছি ( npmএটির উপর নির্ভর করে আমি জানি এটি সেখানে):
function requireGlobal(packageName) {
var childProcess = require('child_process');
var path = require('path');
var fs = require('fs');
var globalNodeModules = childProcess.execSync('npm root -g').toString().trim();
var packageDir = path.join(globalNodeModules, packageName);
if (!fs.existsSync(packageDir))
packageDir = path.join(globalNodeModules, 'npm/node_modules', packageName); //find package required by old npm
if (!fs.existsSync(packageDir))
throw new Error('Cannot find global module \'' + packageName + '\'');
var packageMeta = JSON.parse(fs.readFileSync(path.join(packageDir, 'package.json')).toString());
var main = path.join(packageDir, packageMeta.main);
return require(main);
}
আমি এই পদ্ধতির পছন্দ করি কারণ এটি ব্যবহারের জন্য কোনও বিশেষ মডিউল ইনস্টল করার প্রয়োজন হয় না।
আমি কোনও NODE_PATHসমাধানের সাথে যাইনি যেমন অন্যরা পরামর্শ দিয়েছিল যেহেতু আমি এটি চালানোর আগে অতিরিক্ত কনফিগারেশন / সেটআপের প্রয়োজন ছাড়াই কারও মেশিনে কাজ করতে চেয়েছিলামnpm install আমার প্রকল্পের জন্য ।
এটি যেভাবে কোড করা হয়েছে, কেবলমাত্র এটি শীর্ষ স্তরের মডিউলগুলি (ব্যবহার করে ইনস্টল করা npm install -g ...) বা প্রয়োজনীয় মডিউলগুলি npm( dependenciesএখানে তালিকাভুক্ত : https://github.com/npm/npm/blob/master/package.json ) সন্ধানের গ্যারান্টিযুক্ত । আপনি যদি এনপিএম এর একটি নতুন সংস্করণ ব্যবহার করে থাকেন তবে এটি এখন বিশ্বব্যাপী ইনস্টল করা প্যাকেজগুলির নির্ভরতাগুলি খুঁজে পেতে পারে কারণ node_modulesএখন ফোল্ডারগুলির জন্য চাটুকার কাঠামো রয়েছে ।
আশা করি এটি কারও কাজে লাগবে।