Webpack 러닝 가이드
  • Webpack 모듈 번들러
  • Web Modules
    • Legacy 모듈 관리
    • ES 모듈 관리
  • Babel
    • Babel JavaScript 컴파일러
    • Babel 독립형 빌드
    • Babel 노드 (Node.js) ✘
    • Babel CLI 구성
    • Babel 플러그인
  • webpack
    • Webpack 개발 환경 구성
      • Webpack 설치
      • Webpack 통합
      • Webpack 구성 파일
      • Webpack 워치
      • Webpack 모드
      • Webpack 별칭 등록
      • Webpack 호환성
      • Webpack 개발 서버
      • Webpack 멀티 페이지 설정
    • Webpack 로더
      • File 로더
      • CSS 로더
      • PostCSS 로더
      • Sass 로더
      • Babel 로더
      • TypeScript 로더
    • Webpack 플러그인
      • 환경 변수 등록
      • 빌드 결과 자동 정리
      • 빌드 결과 자동 주입
      • CSS 파일 개별 추출
      • CSS 파일 크기 최적화
      • CSS 미디어쿼리 스플리팅
      • 이미지 파일 크기 최적화
  • React
    • React App 매뉴얼 구성
      • Webpack 초기 구성
      • Babel 컴파일러 구성
      • CSS 스타일 구성
      • 이미지 구성
      • 환경변수 플러그인
      • HTML 플러그인
      • 최적화 구성
      • 코드 스플리팅
      • 개발 서버
      • 이미지, 폰트 에셋 구성
      • 환경 변수 + HTML 구성
      • 빌드 최적화 구성
      • 빌드 자동 정리 구성
      • 개발 서버 구성
      • 폴리필 구성
Powered by GitBook
On this page
  • File Loader 구성
  • 이미지 모듈 작성
  • 모듈 번들링
  • Public 경로 설정
  • 참고

Was this helpful?

  1. webpack
  2. Webpack 로더

File 로더

PreviousWebpack 로더NextCSS 로더

Last updated 4 years ago

Was this helpful?

File Loader 구성

패키지를 프로젝트에 설치한 후, Webpack 구성 파일의 모듈 규칙 안에 로더를 설정합니다.

npm i file-loader -D
webpack.config.js
  module: {
    rules: [
      {
        // 이미지 포멧: PNG, JP(E)G, GIF, SVG, WEBP
        test: test: /\.(png|jpe?g|gif|svg|webp)$/i,,
        use: ['file-loader']
      }
    ]
  }
}

이미지 모듈 작성

이미지 파일을 다운로드 받은 후, 에셋 디렉토리(src/assets) 안으로 이동시킵니다. 그런 다음 예제 디렉토리(src/example) 안에 imageIsland.js 파일을 생성한 후 DOM.createElement 모듈을 사용해 이미지를 동적으로 생성하는 코드를 작성합니다.

그리고 엔트리 파일(src/index.js)에 이미지 파일 모듈을 불러와 DOM.render 모듈을 사용해 UI에 렌더링 합니다.

import islandImage from '../assets/landscape-island.png'
import { createElement } from '../modules/DOM'

/* -------------------------------------------------------------------------- */

export default function imageIsland() {
  return createElement('img', {
    src: islandImage,
    alt: '섬 근처 수역에 서있는 사람',
  })
}
import renderIsland from './example/imageIsland'


render(renderIsland(), rootNode)

모듈 번들링

bundle NPM 명령을 사용해 모듈을 번들링 하면 JS 파일 뿐만 아니라, 이미지 파일까지 모두 번들링 됩니다.

npm run bundle

# 번들링 출력 결과
assets by status 590 KiB [cached] 1 asset
asset main.js 11.9 KiB [compared for emit] (name: main)
runtime modules 1.74 KiB 5 modules
cacheable modules 3.4 KiB
  modules by path ./src/modules/*.js 2.35 KiB
    ./src/modules/LOGGER.js 742 bytes [built] [code generated]
    ./src/modules/DOM.js 1.62 KiB [built] [code generated]
  ./src/index.js 658 bytes [built] [code generated]
  ./src/example/imageIsland.js 339 bytes [built] [code generated]
  ./src/assets/landscape-island.png 80 bytes [built] [code generated]
webpack 5.22.0 compiled successfully in 96 ms

번들링 된 결과물은 배포 디렉토리(dist) 안에 생성됩니다.

.
├── dist/ # Webpack 번들링 배포(결과물)
│   ├── 861b3c3b709916519ce293d61ec0b0aa.png
│   └── main.js
├── src/
│   ├── assets/
│   │   └── landscape-island.png
│   ├── example/
│   │   └── imageIsland.js
│   ├── modules/
│   │   ├── DOM.js
│   │   └── LOGGER.js
│   └── index.js
├── index.html
├── node_modules
├── package-lock.json
├── package.json
└── webpack.config.js

이미지 파일 "이름", "해시", "확장자" 값을 출력하려면 use 옵션을 다음과 같이 변경합니다.

// 이미지 파일 로더
{
  test: /\.(png|jpe?g|gif|svg|webp)$/i,
  use: {
    loader: 'file-loader',
    options: {
      name: '[name].[contenthash].[ext]',
    },
  },
},

Public 경로 설정

<img 
  src="http://localhost:5500/meetup(offline)/week01/02-setting-webpack/dist/861b3c3b709916519ce293d61ec0b0aa.png" 
  alt="섬 근처 수역에 서있는 사람" />

Webpack 구성 파일에 publicPath 설정을 추가해 공용 디렉토리(모든 에셋의 기본 위치)를 설정해봅니다.

module.exports = {
  output: {
    // ...
    publicPath: 'dist/'
  }
}

설정 후 다시 모듈 번들링 하면, 이미지 경로가 공용 디렉토리에 상대적인 위치로 설정된 것을 확인할 수 있습니다.

<img 
  src="dist/861b3c3b709916519ce293d61ec0b0aa.png" 
  alt="섬 근처 수역에 서있는 사람" />
module.exports = {
  output: {
    publicPath: 'https://my-host.io/'
  }
}

참고

번들링 된 결과로 처리된 앱을 웹 브라우저에서 확인하면 동적으로 생성된 이미지 모듈 코드가 다음과 같습니다. <img/> 요소의 src 속성을 보면 웹 주소(URI)를 확인할 수 있습니다. 전체 경로가 사용되었네요.

공용 디렉토리 위치를 URL로 입력할 수도 있습니다.

file-loader
섬 근처 수역에 서있는 사람
도메인
호스팅
Asset Management | webpackwebpack
Public Path | webpackwebpack
Logo
Logo