현대의 JS 애플리케이션에서는 모듈식 패키징 도구를 통해 사용되지 않는 일부 모듈 코드를 자동으로 제거할 수 있습니다. 이 과정을 트리 쉐이킹(Tree Shaking)이라고 합니다. 그러나 이 과정에 익숙해지면, 실제로는 그렇게 완벽하지 않다는 것을 알게 될 것입니다. 우리는 여전히 최적의 번들 사이즈 최적화 효과를 얻기 위해서 추가적인 작업이 필요합니다. 오늘은 ConfigProvider가 트리 쉐이킹을 실패하게 만드는 문제에 대해 이야기해 보겠습니다.
ConfigProvider 그리고 rc-field-form
일상적인 유지보수 과정에서, 우리는 ConfigProvider를 사용할 때 번들 사이즈가 증가하는 문제를 발견했습니다:
안타깝게도, 이것은 불가능합니다. 트리 쉐이킹은 정적 컴파일 과정이고, validateMessages는 런타임 설정입니다. 때문에 패키징 과정에서 validateMessages의 존재 여부를 알 수 없으므로, 이러한 최적화를 달성할 수 없습니다.
의존성 분해
우리는 rc-field-form의 의존성을 조정하여 FormProvider를 분리할 수 있습니다. 하지만 분명히, 우리는 타사 라이브러리의 조정에 의존해서는 안 됩니다(비록 rc-field-form도 우리가 유지보수하고 있지만). 우리는 근본적으로 문제를 해결해야 하며, ConfigProvider가 더 이상 FormProvider에 의존하지 않도록 해야 합니다. 구현은 매우 간단합니다. 이 기능이 rc-field-form에 특화된 것이므로, 우리는 직접 하나의 Context를 추출하여 ConfigProvider가 FormProvider를 인식하지 않도록 만들면 됩니다: