지난 몇 달 동안 저는 정규직 업무를 위한 독립형 위젯을 작성하고 관리하는 방법을 결정하는 임무를 받았습니다. 제대로 작동하는지 확인하는 것은 상대적으로 간단했지만, 이를 유지하는 것은 전혀 다른 문제라는 것을 금방 깨달았습니다.
이를 염두에 두고 여가 시간에 사이드 프로젝트를 시작하여 오픈 소스로 만들었습니다. 이를 통해 위젯의 품질을 보장하는 데 도움이 되는 통찰력과 전략을 공유할 수 있었습니다.
내 위젯에는 높은 수준의 반응성이 필요했기 때문에 Svelte 구성 요소 API에 크게 의존하고 롤업을 사용하여 번들링했습니다. "다음과 같은 문제가 발생하기 전까지는 간단하고 직접적이었습니다.
사용하지 않는 CSS가 초과 근무를 늘리고 있고 원하는 구성 요소의 CSS만 번들로 제공되는지 확신할 수 없었습니다.
엄격한 입력 없이 위젯을 통해 JavaScript를 처리하는 데 어려움을 겪습니다. jwt 디코딩, 인증 등 일부 유틸리티를 공유해야 했기 때문에 급속히 혼란스러워졌습니다.
저는 몇 가지 기본값을 설정하고 더 중요하게는 유형 시스템을 통합할 수 있는 방법을 고려하기 시작했습니다. 이로 인해 내 사이드 프로젝트인 svelte-standalone이 탄생하게 되었습니다.
날씬한 독립형의 목표는 다음과 같습니다.
참고: 선택한 유형 시스템은 TypeScript였습니다.
Rollup 플러그인 및 Svelte 전처리기와 TypeScript 호환성을 확인한 후 한 걸음 물러나 프로젝트를 주요 단계로 나누었습니다. 기본적으로 나는 다음을 가지고 있었다:
그로부터 내 포함 파일이 기본적으로 모든 위젯에 복제된 기본값임을 확인하고 생성하기 시작했습니다. 그래서 codegen 도구를 사용하여 내 얇은 파일과 앱 전체에서 유형을 처리하려는 욕구를 기반으로 3개의 파일을 생성할 수 있었습니다.
그리고 짜잔! 이 접근 방식은 유형 시스템 관련 문제를 해결하고 위젯의 유지 관리 가능성을 향상시켰습니다.
내가 직면한 주요 CSS 관련 과제는 다음과 같습니다. 번거로움 없이 CSS를 제거하고 축소하려면 어떻게 해야 합니까? 협업하기 쉽고 다양한 환경에 통합하기 쉬운 CSS를 어떻게 작성할 수 있나요?
해결책은 매우 간단했습니다. Tailwind CSS를 사용하면 됩니다.
이 접근 방식을 통해 다음과 같은 이점을 확인했습니다.
더 이상 충돌하는 스타일 없음: Tailwind를 사용하면 충돌하는 스타일에 대해 걱정할 필요가 없습니다. 예를 들어 부트스트랩에 크게 의존하는 레거시 앱을 처리할 때 위젯에 접두사와 중요한 플래그를 적용하기만 하면 충돌이 해결되었습니다.
원활한 통합: 내 위젯을 다른 Tailwind 앱으로 가져올 때 특정 Tailwind 지시어를 쉽게 생략하여 번들 크기를 줄일 수 있었습니다.
손쉬운 제거 및 축소: 축소가 간단해졌고 Tailwind에 내장된 PurgeCSS를 사용하면 각 위젯에 대해 콘텐츠 플래그를 적절하게 구성하기만 하면 되었습니다. 이를 통해 필요한 스타일만 최종 번들에 포함되었습니다.
단위 테스트, 통합 테스트, 시각적 테스트를 포함하여 위젯에 대한 포괄적인 테스트를 보장하는 데 어려움을 겪었습니다.
제 주요 목표는 롤업으로 처리하기 전과 후의 구성 요소를 시각화하는 것이었습니다. 이를 달성하기 위해 다음 단계를 수행했습니다.
엄격한 형식의 스토리북: Declaration.d.ts 및 type.ts 파일을 기반으로 엄격한 형식의 스토리북을 구현했습니다. 이를 통해 각 위젯에 대한 기본 스토리를 자동으로 생성하는 것이 편리해졌습니다.
Vite 통합: Vite를 사용하여 Svelte 경로에 번들 구성 요소를 로드했습니다. TypeScript 파일을 기반으로 기본 경로 구성 요소를 생성하는 것도 편리했습니다.
그게 다였어요! 피드백을 주시면 진심으로 감사하겠습니다! 또한 svelte-standalone도 확인해 보세요.
질문, 제안, 우려사항이 있으시면 언제든지 저에게 연락주세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3