Node.js中filter方法里'(file !== basename)'语句含义解析
理解Node.js代码中
file !== basename的过滤逻辑 先拆解几个关键变量的含义:
__filename是Node.js的内置变量,代表当前正在执行的脚本文件的完整路径(比如/project/module/user/model-loader.js)path.basename(__filename)会提取路径里的纯文件名部分,比如上面的例子就会得到model-loader.js,这个值被存在basename变量里。
再看fs.readdirSync的作用:它会读取指定目录(这里是../../../module/${value.model})下的所有文件和子目录名称,返回一个字符串数组。
那file !== basename这句的作用就是:把当前正在执行的这个脚本文件从结果里排除掉。
为什么要做这个判断?
举个实际场景:如果这个加载模型的脚本(比如model-loader.js)刚好被放在了它要读取的模型目录里,那readdirSync就会把它也当成目录里的文件读进来。但我们需要的是目录里的业务模型文件,不是这个加载脚本本身,所以必须把它过滤掉。
至于你问的“文件名是否始终与basename相同?”——当然不是。只有当遍历到的文件刚好就是当前执行的这个脚本时,两者才会相等,绝大多数情况下目录里的其他模型文件和它的文件名都不一样。
再补充下这行filter里其他条件的作用,方便你整体理解:
file.indexOf('.') !== 0:排除Unix/Linux系统下以.开头的隐藏文件file.slice(-3) === '.js':只保留后缀为.js的JavaScript文件
内容的提问来源于stack exchange,提问作者Maker
相关产品推荐
相关产品推荐

