Vite插件里怎么拦截并修改HTML内容?
我正在写一个Vite插件,想在开发服务器启动时动态修改index.html里的某个meta标签,但试了transformIndexHtml钩子好像没生效,控制台也不报错。
我查了文档说要用transformIndexHtml,但写完之后HTML一点没变,是我用法不对吗?
export default function myPlugin() {
return {
name: 'my-plugin',
transformIndexHtml(html) {
return html.replace('<meta name="test">', '<meta name="test" content="modified">');
}
};
}
你的代码本身没问题,但transformIndexHtml默认执行时机可能被其他插件抢跑了。加上enforce: 'pre'强制在前面执行试试:
另外还有个坑,你匹配的字符串要和实际HTML完全一致,引号类型、空格啥的都得对上。建议用正则或者干脆用Vite提供的标签注入方式,更稳:
或者直接用Vite内置的标签描述对象,不用自己拼字符串:
最后检查下你的vite.config.js里插件有没有正确注册进去,有时候就是这种低级错误。改完重启一下dev server,Vite有些配置改动不会热更新。
首先检查一下你的meta标签匹配逻辑,HTML里的实际写法可能跟你replace里的字符串不完全一致。比如有些模板会自带自闭合斜杠
,或者有换行空格之类的,直接字符串匹配就会失败。建议用正则来匹配:另一个可能的原因是插件执行顺序的问题。如果你的HTML是经过其他插件处理后的结果,可能需要设置enforce来控制时机:
再一个就是确认插件有没有正确注册到vite.config.js里,这个应该没问题但有时候就是会忘。
调试的时候可以在transformIndexHtml里打印一下html内容,看看实际拿到的是什么,确认meta标签确实存在且格式正确。如果打印都没输出,那说明钩子根本没被调用,就要检查插件注册配置了。