Webpack 기본 설정

nodejswebpackloader.eslintrc.js.prettierrc.jsbabelTypescriptwebpack.config.jspackage.json
avatar
2025.04.10
·
5 min read

1. Node 설치 [https://nodejs.org/ko]

2. Node, NPM 설치 & 버전 확인

$ node -v
$ npm --version

3. 프로젝트 폴더 생성

4. 프로젝트 작업환경 셋팅

$ npm init -y

5. 프로젝트 디렉토리에 src 폴더 추가

6. Webpack 설치

$ npm i -D webpack  // webpack 설치
$ npm i -D webpack-cli  // webpack 명령어 (리모컨?) 설치
$ npm i -D webpack-dev-server  // webpack dev server (개발용Server)

7. package.json에 scripts 수정

"scripts": {
  "build": "webpack --mode production",
  "start": "webpack -w",
	"dev": "webpack-dev-server --mode development --hot"
}

8. src폴더에서 개발 (html, css, js, scss, ts 등등)

webpack은 기본적으로 js 파일만 번들링 해준다.

그리하여 html, css, scss, ts 등의 파일은 별도의 loader를 사용한다.

8.1. 사용할 플러그인 & 로더 설치

$ npm i vue  // vue사용
$ npm i react react-dom  // react 사용
$ npm i -D sass  // Sass 사용
$ npm i -D typescript  // TypeScript 사용
$ npm i -D @babel/core  // Babel 사용
$ npm i -D @babel/preset-env  // Babel-preset-env 사용
$ npm i -D @babel/preset-react  // Babel-preset-react 사용
$ npm i -D html-loader  // HTML파일 로더
$ npm i -D sass-loader  // Sass파일 로더
$ npm i -D css-loader  // CSS파일 로더
$ npm i -D style-loader  // Style 로더
$ npm i -D babel-loader  // Js 로더
$ npm i -D ts-loader  // TypeScript 로더
$ npm i -D vue-loader vue-template-compiler  // Vue파일 로더 / Vue파일 적용 플러그인
$ npm i -D html-webpack-plugin  // HTML파일 output 플러그인
$ npm i -D mini-css-extract-plugin  // CSS파일 output 플러그인

8.2. 플러그인 또는 파일 로더 사용

  • 상위 디렉토리에 webpack.config.js 파일 추가

const HtmlWebpackPlugin = require('html-webpack-plugin');  // HTML파일 output 플러그인 사용
const { VueLoaderPlugin } = require('vue-loader');  // Vue파일 컴파일러

module.exports = {
  entry: './src/index.js',  // 작업을 하는 js 파일
  output: {
    path: __dirname + '/build',  // 빌드될 경로
    filename: 'index.js'  // 빌드될 파일명
  },
  mode: 'development',  // 빌드될 모드 (development / production)
	resolve: {  // 확장자 자동 해결
    extensions: ['.js', '.jsx', '.vue', '.css', '.html'],  // 사용하는 확장자 리스트
		alias: {
			'@': __dirname + '/src/',
		}
  },
  module: {
    rules: [  // 개발자가 모듈에 대한 규칙 정의
      {
				test: /\.vue$/,  // 빌드될 파일 확장자
				use: ['vue-loader']  // 사용할 로더
			},{
				test: /\.(js|jsx)$/,  // 빌드될 파일 확장자
				exclude: /node_module/,  // 제외할 폴더
				use: ['babel-loader']  // 사용할 로더
			},{
        test: /\.(c|sa|sc)ss$/,
        use: ['style-loader', 'css-loader', 'sass-loader']
      },{
        test: /\.html$/,  // 빌드될 파일 확장자
        use: ['html-loader']  // 사용할 로더
      }, {
        test: /\.(png|jpg|gif|bmp|svg)$/i,
        use: [{
          loader: 'file-loader',
          options: {
            outputPath: './images',
            name: '[name].[ext]'
          }
        }]
      }
    ]
  },
  plugins: [  // output될 파일 정의
    new HtmlWebpackPlugin({  // HTML파일 output 플러그인
      template: './public/index.html',  // output 시킬 HTMl파일
      filename: 'index.html'  // output 시킬 때 HTML파일명 지정
    }),
		new VueLoaderPlugin(),  // Vue 파일 컴파일러
  ],
	devServer: {
		open: true,
	}
}

8.3. TypeScript 사용

  • 상위 디렉토리에 tsconfig.json 파일 추가

{
  "compilerOptions": {
    "outDir": "./build/"
  }
}

9. Webpack build / start

$ npm run build  // 개발된 파일을 빌드
$ npm start  // src폴더의 내용이 변경되면 자동으로 빌드 (webpack이 지켜보고 있음)

※ babel 사용법

$ npm i -D babel-loader
$ npm i -D @babel/core
$ npm i -D @babel/preset-env
$ npm i -D @babel/preset-react

최상위 디렉토리에 '.babelrc.js' 파일 생성 후 아래 코드 작성

module.exports = {
	presets: [
		'@babel/env',
		'@babel/react'
	]
}

.eslintrc.js, .prettierrc.js 설정

// .prettierrc.js
module.exports = {
  arrowParens: "avoid",
  bracketSameLine: true,
  bracketSpacing: false,
  singleQuote: true,
  trailingComma: "all",
};
// eslintrc.js
module.exports = {
  root: true,
  extends: "@react-native-community",
};

자주 사용하는 모듈

npm i vue vuex vuetify axios json-server
npm i -D html-webpack-plugin vue-template-compiler html-loader style-loader babel-loader css-loader sass sass-loader @babel/core @babel/preset-env file-loader vue-loader webpack webpack-dev-server webpack-cli

#css
@import url('http://cdn.jsdelivr.net/npm/@mdi/font@6.5.95/css/materialdesignicons.min.css');






- 컬렉션 아티클