伙计们我一直在编写一个node_module,它给你所选模块的依赖关系,所以有我的代码
function depend(modulename, cb) {
let package = JSON.parse(fs.readFileSync("./node_modules/"+modulename+'/package.json', "utf8"));
var re = 'CHECKING' ? package.dependencies : 'The module has no dependencies';
cb(re)
}
const fs = require('fs');
module.exports = depend;
当我运行它时它在一个模块上没有模块它给我{}
而不是The module has no dependencies
,那么任何想法?
答案 0 :(得分:1)
我建议看看Ternary (conditional) Operator的工作原理。
参考您发布评论的代码:
您当前的代码只是检查package.dependencies的存在,即使它是一个空对象,像if(package.dependencies)...
这样的东西也会评估为true,因为空对象是truthy值。
您需要做的是检查对象本身是否为空。一种方法是使用Object.keys检查其密钥的长度。
var re = Object.keys(package.dependencies).length ? package.dependencies : 'The module has no dependencies';
但更好的检查是你的方法和这个方法的结合:
var re = package.dependencies && Object.keys(package.dependencies).length ? ...
因为它检查package.dependencies是否存在以及它是否为空。
答案 1 :(得分:1)
var re = 'CHECKING' ? package.dependencies : 'The module has no dependencies';
是ternary。
这意味着:
如果'检查'然后将
package.dependencies
分配给re
,否则将'The module has no dependencies'
分配给re
这是您的错误,if ('CHECKING')
将始终评估为true
,因此始终会将package.dependencies
分配给re
。您必须将代码重构为以下内容:
var re = Object.keys(package.dependencies).length > 0 ? package.dependencies : 'The module has no dependencies';
将测试package.dependencies
是否具有一个或多个依赖项,以便影响re
的正确值。我们不会在length
上使用package.dependencies
因为它是一个没有任何length
属性的对象,而是使用Object.keys
。
在您在评论中提供的第二个示例中,if (package.dependencies)
也将始终评估为true
,因为package.dependencies
不为空或未定义,因此它被视为{ {1}}。