Bu eski bir soru olduğunu biliyorum, ama ben semver
bir preinstall
komut dosyası kullanarak bazı sürüm denetimi yapmaya çalışırken bu koştu package.json
. Yüklü herhangi bir yerel modüle güvenemeyeceğimi bildiğim için, bunu semver
global node_modules
klasörden istemek için kullandım ( npm
buna bağlı olarak orada olduğunu biliyorum):
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);
}
Bu yaklaşımı seviyorum çünkü bu, kullanmak için herhangi bir özel modülün kurulmasını gerektirmiyor.
NODE_PATH
Başkalarının önerdiği gibi bir çözümle gitmedim, çünkü bunu npm install
projem için çalıştırmadan önce ek yapılandırma / kurulum gerektirmeden kimsenin makinesinde çalışmak istedim .
Bunun kodlanması sırasında, yalnızca üst düzey modülleri (kullanılarak kurulur npm install -g ...
) veya gerekli olan modülleri npm
( dependencies
burada listelenen : https://github.com/npm/npm/blob/master/package.json ) bulması garanti edilir . NPM'nin daha yeni bir sürümünü kullanıyorsanız, node_modules
şu anda klasörler için daha düz bir yapı olduğundan global olarak yüklenmiş diğer paketlerin bağımlılıklarını bulabilir .
Umarım bu birisi için yararlıdır.