如何设置parse5使其解析Angular模板时保持大小写敏感性?
解决parse5解析Angular模板时属性名小写转换的问题
parse5默认遵循HTML标准,会将所有属性名转换为小写,这对依赖大小写区分的Angular指令(比如*ngIf)来说确实是个问题。要解决这个问题,你可以通过以下方式配置parse5,保留原始的大小写:
- 启用XML解析模式:parse5支持XML解析模式,在该模式下会严格保留标签和属性的原始大小写。你只需要在调用解析方法时传入
xmlMode: true的配置项即可。
示例代码:
const parse5 = require('parse5'); const angularTemplate = `<div *ngIf="showContent">Hello Angular</div>`; const ast = parse5.parse(angularTemplate, { xmlMode: true }); // 此时解析后的AST中,属性名会保持为*ngIf而非*ngif
- 注意事项:启用XML模式后,parse5会按照XML的规则解析模板,比如要求标签必须闭合(Angular模板里的自闭合标签需要符合XML规范),不过这对Angular模板来说通常不是问题,因为Angular模板本身就趋近于XML的结构规范。
另外,如果你使用的是parse5的parseFragment方法,同样可以传入该配置项来实现大小写保留:
const fragment = parse5.parseFragment(angularTemplate, { xmlMode: true });
这样配置后,parse5就不会再将*ngIf转换为*ngif,能正常解析Angular模板的结构型指令了。
内容的提问来源于stack exchange,提问作者CH4B
相关产品推荐
相关产品推荐

