module.paths
爲require
存儲搜索路徑數組。搜索路徑與調用require
的當前模塊有關。所以:
var fs = require("fs");
// checks if module is available to load
var isModuleAvailableSync = function(moduleName)
{
var ret = false; // return value, boolean
var dirSeparator = require("path").sep
// scan each module.paths. If there exists
// node_modules/moduleName then
// return true. Otherwise return false.
module.paths.forEach(function(nodeModulesPath)
{
if(fs.existsSync(nodeModulesPath + dirSeparator + moduleName) === true)
{
ret = true;
return false; // break forEach
}
});
return ret;
}
和異步版本:
// asynchronous version, calls callback(true) on success
// or callback(false) on failure.
var isModuleAvailable = function(moduleName, callback)
{
var counter = 0;
var dirSeparator = require("path").sep
module.paths.forEach(function(nodeModulesPath)
{
var path = nodeModulesPath + dirSeparator + moduleName;
fs.exists(path, function(exists)
{
if(exists)
{
callback(true);
}
else
{
counter++;
if(counter === module.paths.length)
{
callback(false);
}
}
});
});
};
用法:
if(isModuleAvailableSync("mocha") === true)
{
console.log("yay!");
}
或者:
isModuleAvailable("colors", function(exists)
{
if(exists)
{
console.log("yay!");
}
else
{
console.log("nay:(");
}
});
編輯:注:
module.paths
不在API
- 文檔states,您可以添加將由
require
掃描路徑,但我不能讓它工作(我在Windows XP)。
我已經回答,但現在我已經注意到了「全球化」一詞。對於「全局」,你是指在'npm'中安裝了'-g'選項的模塊?即'npm install -g mocha'?編輯:AFAIK'require'不會找到使用'-g'選項安裝的模塊。 – 2013-03-08 21:45:06