需要解决的问题 扣取下来的webpack文件过大
解决思路 用ast将需要的代码扣下来 结果展示
实现步骤
-
第一步:我们得知道需要哪些模块
在入口处,增加模块记录
-
第二步,分析ast代码
通过分析发现,key 有三种值 分别为NumbericLiteral、StringLiteral、Identifier
name可以编写如下代码
let find_function = {
ObjectProperty(path) {
let node = path.node;
if (t.isFunctionExpression(node.value)) {
if (t.isStringLiteral(node.key) && decode_function.includes(node.key.value)){
let function_name = node.key.value;
// console.log("function_name:" + function_name, number += 1)
function_final_list.push(generator(node).code)
}else if(t.isIdentifier(node.key)&& decode_function.includes(node.key.name)){
let function_name = node.key.name;
// console.log("function_name:" + function_name, number += 1)
function_final_list.push(generator(node).code)
}else if(t.isNumericLiteral(node.key)&& decode_function.includes(String(node.key.value))){
let function_name = node.key.value;
// console.log("function_name:" + function_name, number += 1)
function_final_list.push(generator(node).code)
}
}
}
}
- 注意
在isNumbericLiteral的方法,由于我在提取时做了String处理,所有后续的node.key.value 也需要做String处理