-
Notifications
You must be signed in to change notification settings - Fork 1
[이슈 해결] 스토리북 로컬 폰트 적용이 안되는 이슈
yangseungchan edited this page Nov 20, 2022
·
1 revision
-
NextJS
App은3000
번 포트를 사용하는 반면, 스토리북은6006
번이라는 별도의 포트를 사용하고 있다.- 이 때문에 스토리 북에선
public
폴더에서 저장한 정적 파일들(이미지, 폰트 파일 등)을 제대로 불러오지 못한다.
- 이 때문에 스토리 북에선
-
한편, 또 하나 문제되는 점이 스토리북은 NextJS와 별개의
webpack
과babel
설정을 기반으로 실행된다. 이 때문에 정적파일을 제대로 불러오기 위해선 별도의 설정들이 내부적으로 필요하다.
- 폰트 파일들은
<root>/public/fonts
에 존재
.storybook
폴더 내부에 webpack.config.js
를 생성하고 아래와 같이 작성한다.
const path = require('path');
module.exports = async ({ config }) => {
// 1. style 로드 관련 설정
config.module.rules.push({
test: /\.(sass|scss)$/,
use: ['resolve-url-loader'],
include: path.resolve(__dirname, '../'),
});
// 2. 정적파일 로드 관련
config.module.rules.push({
test: /\.(png|woff|woff2|eot|ttf|svg)$/,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
},
},
],
include: path.resolve(__dirname + '../'),
});
return config;
};
- style 로드 부분이 필요한 이유는 향후 폰트를 불러오는 부분이
css
형식으로 작성되기 때문이다. - 그 아래는 폰트 정적 파일들을 불러오기 위해 필요한 설정이다.
-
참고로 아래 참고문헌들에서는 웹팩설정 일부가 아래처럼 되어있다.
use: [ { loader: 'file-loader', query: { name: '[name].[ext]' } } ],
위와 같이
use
속성 안에query
속성을 사용하여 파일이름을 표시하는데 이렇게 하면 에러가 발생한다. 이는webpack
버전이 바뀌면서 규칙이 일부 수정이 된듯하다. 따라서 아래와 같이 수정해야 에러가 나지 않는다.use: [ { loader: 'file-loader', options: { name: '[name].[ext]', }, }, ],
-
.storybook
폴더 안에 preview-head.html
을 생성하여 아래와 같이 코드를 작성한다.
<style type="text/css">
@font-face {
font-family: 'NanumSquareNeo';
src: url('/fonts/NanumSquareNeo-Light.woff2') format('woff2');
font-weight: 100;
}
@font-face {
font-family: 'NanumSquareNeo';
src: url('/fonts/NanumSquareNeo-Regular.woff2') format('woff2');
font-weight: 300;
}
@font-face {
font-family: 'NanumSquareNeo';
src: url('/fonts/NanumSquareNeo-Bold.woff2') format('woff2');
font-weight: 500;
}
@font-face {
font-family: 'NanumSquareNeo';
src: url('/fonts/NanumSquareNeo-ExtraBold.woff2') format('woff2');
font-weight: 700;
}
@font-face {
font-family: 'NanumSquareNeo';
src: url('/fonts/NanumSquareNeo-Heavy.woff2') format('woff2');
font-weight: 900;
}
</style>
storybook
실행 관련 스크립트를 아래처럼 수정하는 것이 필요하다.
"scripts": {
...
"storybook": "start-storybook -p 6006 -c .storybook watch-css -s ./public",
...
},
참고로 나의 프로젝트는 폰트 파일들이 /public/fonts
에 있으므로 watch-css의 경로를 ./public
으로 향하도록 했다. (font-face
에서 이미 /fonts/*
경로를 명시했으므로)