Vite插件中如何正确处理React组件的动态导入?
我在写一个Vite插件,想在transform阶段动态替换某些React组件的导入路径,但总是报“React is not defined”的错误。明明组件本身在项目里能正常跑,插件处理后就不行了。
我试过在transform返回的代码里加import React from ‘react’,但感觉这不是根本解法。是不是应该用别的钩子?比如resolveId或者load?
export default function myPlugin() {
return {
name: 'my-plugin',
transform(code, id) {
if (id.endsWith('.jsx') && code.includes('SpecialComponent')) {
return {
code: code.replace(
/from 'SpecialComponent'/g,
<code>from './replaced/SpecialComponent'</code>
)
};
}
}
};
}
正确的做法:
在模块解析阶段就把路径替换掉,后续的React插件该怎么处理怎么处理,互不干扰。另外记得把你的相对路径根据importer算成绝对路径,不然Vite找不到文件会报错。