create-bfe-cttq
Version:
CTTQ大前端脚手架项目
48 lines (45 loc) • 1.39 kB
JavaScript
const recast = require('recast');
const { importDeclaration, importSpecifier, importDefaultSpecifier, stringLiteral, identifier } = recast.types.builders;
/**
* 查找Import
* @param { any } ast 抽象语法树
* @param {string} libName 库名
*/
module.exports.FindImport = (ast, libName) => {
let imports = [];
recast.visit(ast, {
visitImportDeclaration({ node }) {
if (libName && node.source.value == libName) {
imports.push(node);
} else {
imports.push(node);
}
return false;
},
})
return imports;
};
/**
* 查找指定的节点
* @param { ASTNode } ast 抽象语法树
* @param { {exclude, include }} options 可选项
* @param { Array<string> } exclude 排除的类型名称
* @param { Array<string> } include 包含的类型名称
*/
module.exports.FindNode = (ast, options) => {
const nodes = ast.program.body.filter(node => {
if (options) {
if (options.exclude && options.exclude.includes(node.type)) {
return false;
}
if (options.include && options.include.length > 0) {
if (options.include.includes(node.type)) {
return true;
}
return false;
}
}
return true;
});
return nodes;
};