Module-federation에서 webfontloader은 어떻게 적용 해야 할까?

God Beom·2022년 4월 25일

micro-frontend

목록 보기
5/5
post-thumbnail

TL;DR

  • remote의 폰트를 host에서도 똑같이 적용.
  • 모든 패밀리 사이트의 폰트는 process.env.VUE_APP_COMM_HOSTNAME + "/styles/fonts/_font.css" 으로 일관성있게 적용 하고자 도입
  • blink현상 없이 폰트 적용 하고자 도입

remote

  • webfontloader.ts
export async function loadFonts() {
  const webFontLoader = await import(/* webpackChunkName: "webfontloader" */ "webfontloader");

  webFontLoader.load({
    custom: {
      families: ["SpoqaHanSansNeo"],
      urls: ["/styles/fonts/_font.css"],
    },
  });
}
  • remote package
  • _font.css
/* Font - SpoqaHanSansNeo */
@font-face{font-family:'SpoqaHanSansNeo';font-weight:700;font-display:swap;src:local('Spoqa Han Sans Neo Bold'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Bold.woff2') format('woff2'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Bold.woff') format('woff'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Bold.ttf') format('truetype')}
@font-face{font-family:'SpoqaHanSansNeo';font-weight:500;font-display:swap;src:local('Spoqa Han Sans Neo Medium'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Medium.woff2') format('woff2'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Medium.woff') format('woff'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Medium.ttf') format('truetype')}
@font-face{font-family:'SpoqaHanSansNeo';font-weight:400;font-display:swap;src:local('Spoqa Han Sans Neo Regular'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Regular.woff2') format('woff2'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Regular.woff') format('woff'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Regular.ttf') format('truetype')}
@font-face{font-family:'SpoqaHanSansNeo';font-weight:300;font-display:swap;src:local('Spoqa Han Sans Neo Light'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Light.woff2') format('woff2'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Light.woff') format('woff'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Light.ttf') format('truetype')}
@font-face{font-family:'SpoqaHanSansNeo';font-weight:100;font-display:swap;src:local('Spoqa Han Sans Neo Thin'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Thin.woff2') format('woff2'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Thin.woff') format('woff'), url('./SpoqaHanSansNeo/SpoqaHanSansNeo-Thin.ttf') format('truetype')}

host

export async function loadFonts () {
  const webFontLoader = await import(/* webpackChunkName: "webfontloader" */"webfontloader");

  webFontLoader.load({
    custom: {
      families: ["SpoqaHanSansNeo:100,300,400,500,700&display=swap"],
      urls: [process.env.VUE_APP_COMM_HOSTNAME + "/styles/fonts/_font.css"],
    },
  });
}

회고

  • webfontloader가 꼭 필요하지 않음.
  • 절대적 로딩 속도는 같음.
  • 폰트를 먼저 로드 할것이냐, 컨텐츠를 먼저 로드 할것이냐의 차이 일뿐.
profile
의미있는10%코드를 위하여

1개의 댓글

comment-user-thumbnail
약 17시간 전

2025 업데이트

  • CSS In JS (런타임 스타일 생성)-> prebuild CSS (빌드타임에 스타일 완성) 으로 전환하면 헌타임에 스타일이 뒤섞이는 문제를 직관젓으로 해결가능

  • 고전적 CSS x -> scoped Style으로 대부분 해결 가능.

답글 달기