使用jscodeshift时,如何从仅含单个节点路径的集合中提取该节点路径?
提取jscodeshift Collection中的单个节点路径
当你确定Collection中只有一个目标节点时,有两种简便方式直接提取对应的NodePath,无需用forEach遍历:
1. 使用get(0)直接获取
get(index)方法可以从Collection中取出指定索引的NodePath,既然你明确只有一个节点,直接取索引0即可:
// 获取唯一的默认导出节点路径 const defaultExportPath = j(file.source).find(j.ExportDefaultDeclaration).get(0); // 直接操作该节点,比如修改导出名称 if (defaultExportPath.value.declaration.type === 'Identifier') { defaultExportPath.value.declaration.name = 'newDefaultExportName'; }
2. 先判断节点数量再提取(更安全)
如果不确定代码中是否真的只有一个目标节点(比如存在多个默认导出的异常场景),可以先通过Collection的length属性判断数量,再做处理:
const defaultExports = j(file.source).find(j.ExportDefaultDeclaration); if (defaultExports.length === 1) { const defaultExportPath = defaultExports.get(0); // 执行你的处理逻辑 } else if (defaultExports.length === 0) { console.log('未找到默认导出'); } else { console.log('存在多个默认导出,无法提取单个节点'); }
另外,Collection的.first()方法会返回仅包含第一个元素的新Collection,但如果要获取NodePath,仍需搭配get(0)使用,所以直接用get(0)是最直接的方式。
内容的提问来源于stack exchange,提问作者linuxdan
相关产品推荐
相关产品推荐

