今天咱们来实例分析一个老哥为Vue添加新功能提的pr。
主要逻辑是,将const定义的变量且通过判断方法isLiteral判断是否为isAllLiteral
function isLiteral(node: Node): boolean {switch (node.type) {case 'UnaryExpression':return isLiteral(node.argument)case 'BinaryExpression':return isLiteral(node.left) && isLiteral(node.right)case 'ArrayExpression':return node.elements.every(element => element && isLiteral(element))case 'ObjectExpression':return node.properties.every(prop =>prop.type === 'ObjectProperty' &&(isLiteral(prop.key) ||(!prop.computed && prop.key.type === 'Identifier')) &&isLiteral(prop.value))case 'SequenceExpression':case 'TemplateLiteral':return node.expressions.every(expr => isLiteral(expr))default:if (isLiteralType(node)) {return true}return false}}
如果满足条件则使用此方法,对源码进行编辑
// hoist literal constantsif (hoistStatic && isAllLiteral) s.move(start, end, 0)
