Parcel构建异常:Syncfusion Spreadsheet外部CSS仅在watch模式生效
以下是几种可能导致该差异的核心原因:
Parcel摇树优化的模式差异
Parcel在watch模式下的摇树(Tree Shaking)逻辑偏向宽松,不会严格校验CSS类是否有静态引用;但切换到build模式时,即便添加了--no-optimize参数,其内部依赖追踪仍会对动态生成的类名进行严格校验。Syncfusion Spreadsheet组件大概率使用了大量动态类名(比如根据表格状态、数据动态生成的样式类),Parcel在build时检测不到这些类名的静态引用,就会误判CSS为未使用资源并剔除,而Diagram组件的CSS类多为静态绑定,所以能被正常识别打包。Syncfusion组件的CSS依赖结构差异
不同Syncfusion组件的CSS组织方式可能不同:Diagram的CSS可能直接内嵌在组件核心入口的依赖链中,Parcel能清晰追踪到关联关系;而Spreadsheet的CSS可能分散在多个子模块,或是通过异步加载逻辑引入,Parcel在build模式下的依赖解析规则和watch模式存在差异,导致未将这些CSS纳入打包范围。Parcel缓存的残留干扰
build模式下Parcel会优先复用缓存文件,如果之前的缓存中未包含Spreadsheet的CSS,即便后续修改了导入方式,旧缓存仍会导致新的CSS无法被打包。而watch模式会实时更新缓存,所以能正确生成包含Spreadsheet样式的CSS bundle。TypeScript类型解析的间接影响
若Spreadsheet组件的TypeScript类型定义未明确关联其CSS模块,Parcel在处理TS文件时可能无法识别到CSS的依赖关系。build模式下Parcel对TS的依赖解析更严格,而watch模式下可能跳过了部分校验步骤,从而保留了CSS引用。
内容的提问来源于stack exchange,提问作者Dawid Sibiński

