-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Fix] 메인이미지 경로 변경 #116
[Fix] 메인이미지 경로 변경 #116
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p-2;
src/assets와 public에서 정적 에셋을 관리하는 장단점을 찾아보았어요.
아래는 src에서 관리할 때의 장점입니다.
-
타입 안정성: src 안에 있는 사진을 실수로 지우면 빌드가 깨져서 실수로 지웠단 걸 알 수 있는데, public 폴더는 그게 불가능해서 위험함
-
캐싱: public 폴더에 둔 이미지를 파일명 그대로 에셋만 바꿨을 때, 이미지가 캐시되어서 업데이트되지 않을 위험이 있음
이런 점들이 있다고 해요! vite의 공식 문서에서 빌드 시 정적 에셋 관련 설정을 해 줄 수 있는 부분이 있을 것 같은데, 그 방식도 알아보면 좋을 것 같습니다.
현재 PR은 public에서도, src에서도 정적 에셋을 관리하게 되어 좋은 방향은 아닌 것 같아요.
에셋을 소스에 포함시켰을 때 빌드 퍼포먼스나 다른 영향은 없나요? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
현 상황에서는 src/assets → public/assets로 옮기는 게 제일 간편할 것 같네요. 근데 이렇게 하면 다음처럼 못 쓰게 되나요? 그럼 또 생각해 봐야 할 것 같은데...
import { ReactComponent as Icon } from "./";
import Image from "./";
<img src={Image} />
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
흠.. 근데 src/assets와 public 모두 쓰는 건 에셋이 너무 분산되어 관리되는 것 같아서요.
@ccxz84 챗지피티에게 물어본 결과
라는 답변을 받았습니다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
분산되는 게 별로라면 src/assets
에서 모두 관리하되, 이미지처럼 JS 연동이 필요없는 파일에만 publicDir을 지정하는 건 어떨까요?
└─ assets
├─ images
└─ icons
// publicDir: 'src/assets/images',
이러면 images는 public하게, icons는 기존 asset 형식으로 다룰 수 있지 않을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vite는 정적 에셋을 public에서 관리하는 걸 권장하더라고요. 그래서 제가 생각한 해결 방안은 이건데, 보시고 의견 알려 주세요!
- src/assets에서 관리하던 정적 에셋을 public에서 관리한다. (추가했던 publicDir은 뺌)
- js에서도 사용할 수 있게 하기 위해 다음과 같은 vite.config.ts를 적용한다.
export default defineConfig({
plugins: [react(), vanillaExtractPlugin(), svgr()],
resolve: {
alias: [
{ find: '@/assets', replacement: path.resolve(__dirname, 'public/assets') },
{ find: '@', replacement: path.resolve(__dirname, 'src') },
],
extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.css.ts'],
},
publicDir: 'src/assets',
});
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
vite는 정적 에셋을 public에서 관리하는 걸 권장하더라고요. 그래서 제가 생각한 해결 방안은 이건데, 보시고 의견 알려 주세요!
해봤더니 잘 되네요..! 좋습니다.
/public/assets/icons
보다는 바로 /public/icons
로 접근하게 하는 것도 좋아보여요. (public이랑 assets이랑 비슷한 느낌이어서..)
alias: [
{ find: '@/assets', replacement: path.resolve(__dirname, 'public') },
...
잘 되는 것 같습니다! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
4cf7b42
수정완료하였습니다
<link | ||
rel="icon" | ||
type="image/svg+xml" | ||
href="public/assets/icons/morak.ico" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얘는 public/morak.ico에 관리하자는 말이었습니다! 사실 사용하는 icon이라고 볼 수는 없으니까요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 경로로 파일을 옮기고 적용해봤는데, npm run dev
에서는 파비콘이 보이지 않고 npm run build
후 preview
를 하면 파비콘이 보이네요? 이유는 잘 모르겠습니다...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아까 svg 관련 오류난다고 했던 부분은 해결된 걸까요? 이 PR에 적어 두면 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
svg 오류 관련하여 정리하였습니다
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
나중에 바꿀 수도 있겠다는 생각이 잠시 스쳐갔지만.. 🫨 approve~~
설명
npm run build
으로 배포 시 메인이미지가 깨지는 현상이 발생하였습니다.npm run build
후npm run preview
실행 시 메인이미지 깨짐src/assets
에서 관리하던 정적 에셋을public
하위에서 관리하도록 이동하고,@/assets
절대경로를 추가하였습니다.build
후preview
실행 시 이미지 정상적으로 보입니다.정적 에셋 파일 관리
Vite에서는 정적 에셋을
public
폴더 내에서 관리하는 것을 권장합니다.따라서
src/assets
에서 관리하던 이미지 파일과 svg 파일을public/assets
로 이동하였습니다.svg파일의 경우 import 해서 사용하는 방식을 사용하는데,
public
폴더 내의 파일을 import할 경우npm run dev
실행 시 아래와 같은 경고가 발생합니다.Vite 공식 문서에 따르면
public 디렉터리에 위치한 에셋은 JavaScript 코드로 가져올 수 없습니다.
라고 합니다.가장 권장하는 방식은
public
폴더에서 이미지 파일을,src/assets
폴더에서 import 해 사용할 svg 파일을 관리하는 방식인 것 같습니다.우선 정적 파일을
public
과src/assets
두 위치에서 관리하기는 분산되어public
폴더 내에서 모두 관리하기로 결정하였습니다.완료한 기능 명세
src/assets
에서 관리하던 정적 에셋을public
하위에서 관리하도록 이동@/assets
절대경로 추가스크린샷
리뷰 요청 사항