Vite插件中transform钩子不生效是怎么回事?
我在写一个Vite插件,想用transform钩子处理.vue文件里的内容,但发现根本没进这个函数。配置也加了,路径也对,就是不触发,到底哪里出问题了?
这是我的插件代码:
export default function myPlugin() {
return {
name: 'my-plugin',
transform(code, id) {
console.log('transform called', id); // 这行完全没打印
if (id.endsWith('.vue')) {
return code.replace(/hello/g, 'hi');
}
}
};
}
首先最常见的问题就是插件有没有正确注册到 vite.config.js 里。你得确认一下配置文件里是不是这样写的:
我之前就犯过一个低级错误,直接写
myPlugin忘了加括号调用,导致插件根本没生效。另外一个关键问题是,Vite 处理 .vue 文件时,
id参数会带上 query 参数,比如/src/App.vue?vue&type=template&lang.js这种格式,所以你的id.endsWith('.vue')判断会失败。我的做法是把判断逻辑改一下,用
includes或者把 query 参数去掉:还有一点要注意,如果你想在 .vue 文件被 vue 插件解析之前就处理原始内容,可能需要加上
enforce: 'pre'选项,不然 transform 拿到的可能已经是处理过的代码片段了。改完之后重启一下开发服务器试试,应该就能看到 console.log 输出了。