新写的卡片组件,逻辑没问题,类型检查过了,构建也成功了。部署完页面上根本没有这个模块。
控制台不报错,网络请求正常,刷新无效。
现代打包器默认开启 tree-shaking。一个组件如果只是定义了,却没有任何地方调用它,它就不在模块依赖图的可达路径上,会被当作死代码直接从产物里删掉。
最典型的写法:在主面板文件里加了函数定义,却忘了在 return 的 JSX 里把它挂上去。
构建成功只说明语法和类型没问题,不代表你的代码进了产物。部署前先 grep 一遍:
grep -rl "组件里的独有关键字" dist/assets/
如果搜不到,就说明它已经被摇掉了——这时再去查缓存、查部署、查 CDN,都是白费时间。
在主组件的渲染树里真正调用一次:
export default function Dashboard() {
return (
<>
<ExistingCard />
<NewCard />
</>
);
}
顺带一个 JSX 注释的坑:注释 {/* ... */} 里面不能再出现 */,注释会被提前关闭,后面的内容变成代码,直接编译报错。这个报错信息还特别有误导性,我第一次看到愣是没往注释上想。