Kimsora✨
article thumbnail
Published 2022. 11. 23. 16:20
번들링 & 웹팩 Javascript
320x100
반응형

초기의 방식을 사용하게 되면 변수 이름의 충돌 가능성, 많은 js 파일 다운로드로 인한 네트워크 부하, 수동적인 반복 작업 (파일, 이미지 압축 등) 같은 부작용이 발생하고 이를 보안하기 위해 번들링이 등장했다

번들링

모듈들의 의존성 관계를 파악하여 그룹화시켜주는 작업을 뜻한다

  • 코드의 모듈화
  • 리소스 최적화
  • 반복 작업의 자동화
Module 
분리된 코드 조각,시스템을 이루는 논리적인 일부분
Bundling
'묶는다'는 뜻, 기능별로 모듈화 했던 파일들을 하나로 묶어주는 작업을 말한다

Bundler 
여러 개의 파일을 묶어주는 도구

Webpack, Borserify, Parcel 등이 있다

Webpack

webpack은 현재, 프론트엔드 애플리케이션 배포를 위해 가장 많이 사용하는 번들러다. 대규모 유저에게 웹 애플리케이션을 제공하기 위해서 사용된다

 

Webpack이란 여러 개의 파일을 하나의 파일로 합쳐주는 모듈 번들러를 의미한다 

모듈 번들러란 HTML, CSS, JavaScript 등의 자원을 전부 각각의 모듈로 보고 이를 조합해 하나의 묶음으로 번들링(빌드)하는 도구이다

1. 웹팩 설치

먼저 프로젝트를 진행할 디렉토리를 만든다.  해당 폴더에서 npm init -y 명령어를 입력해 npm을 초기화 시켜준다 

그러면 해당 폴더에 package.json 파일이 생기게 된다

npm i -D webpack webpack-cli 명령어를 입력하여 웹팩과 웹팩 CLI 패키지를 설치한다

$ mkdir webpack--tutorial
$ cd webpack-tutorial
$ npm init -y
$ npm i -D webpack webpack-cli

올바르게 설치

{
  "name": "fe-sprint-webpack-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": ""
}

2. webpack.config.js

webpack.config.js 파일을 루트 디렉토리에 만들어 준다

3. 웹팩 환경 설정

Target

 

다양한 환경들과 target을 컴파일합니다. target은 따로 설정하지 않으면 기본값인 web으로 설정 한다
esX를 넣으면 지정된 ECMAScript 버전으로 컴파일 할 수 있다.

 module.exports = {
 	target: ["web", "es5"],
 };

해당 config 파일에서 es5를 배열안에 넣었기 때문에, 이 config 파일은 브라우저와 동일한 환경에서 사용하기 위해 컴파일 할 것이고, 작성된 코드를 es5 버전으로 컴파일 하겠다고 지정한 것이다. Browser Compatibility와 연관된 속성이다.

 

 

Entry(엔트리)

 

개발자가 작성한 코드의 "시작점" 이다
Entry point : Entry 속성을 뜻함. webpack이 내부의 디펜던시 그래프를 생성하기 위해 사용해야 하는 모듈.

=>Webpack은 이 Entry point를 기반으로 직 간접적으로 의존하는 다른 모듈과 라이브러리를 찾아낼 수 있다.

(webpack 설정해서 entry속성을 이용해 다른 entry point를 지정할 수 있다.)

// 기본값
 module.exports = {
 	...
   entry : "./src/index.js",
 }; 
// 지정값 
module.exports = {
	...
  entry : "./src/script.js",
}

 

 

Output(출력)

 

기본 출력 파일의 경우에는 ./dist/main.js로 설정

생성된 기타 파일의 경우에는 ./dist 폴더로 설정

const path = require('path');

module.exports = {
	...
  output: {
    path: path.resolve(__dirname, "docs"), // 절대 경로로 설정을 해야 합니다. 
    filename: "app.bundle.js",
    clean: true
  },
};

위의 예제에서는 output.filename과 output.path 속성을 사용하여 webpack에 번들의 이름과 내보낼 위치를 알리고 있다

path 속성을 사용할 때는 path 모듈을 사용해야만 합니다.

 

 

Loader(로더)

 

Webpack은 기본적으로 JavaScript와 JSON 파일만 이해한다.
 loader를 사용하면 Webpack이 다른 유형의 파일을 처리, 유효한 모듈로 변환해 애플리케이션에 사용 할수 있다

 디펜던시 그래프에 추가할 수 있다.

 

module.exports = {
	...
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
        exclude: /node_modules/,
      },
    ],
  },
};

상위 수준에서 loader는 webpack 설정에 몇 가지 속성을 가집니다.

 

test와 use 속성은 필수 속성.

  • test: 변환이 필요한 파일들을 식별하기 위한 속성
  • use: 변환을 수행하는데 사용되는 로더를 가리키는 속성

  • exclude: 바벨로 컴파일하지 않을 파일이나 폴더를 지정.
  • include : 컴파일해야 할 파일이나 폴더 지정

=>이런 속성을 넣어 규칙을 정하기 위해서는 module.rules 아래에 정의해야 한다.

 

 

Plugins(플러그인)

 

Plugins를 사용하면 번들을 최적화하거나 에셋을 관리하고, 또는 환경변수 주입 등의 광범위한 작업을 수행

// 1. 플러그인을 사용하기 위해서는 require()를 통해 플러그인을 먼저 요청
const webpack = require('webpack');

// 생성된 모든 번들을 자동으로 삽입하여 애플리케이션용 HTML 파일을 생성
const HtmlWebpackPlugin = require("html-webpack-plugin"); 
// CSS를 별도의 파일로 추출해 CSS를 포함하는 JS 파일 당 CSS 파일을 작성해주게끔 지원
const MiniCssExtractPlugin = require("mini-css-extract-plugin"); 

module.exports = {
  ...
  // 2. 그리고 plugins 배열에 사용하고자 하는 플러그인을 추가
  plugins: [
    // 3. 다른 목적으로 플러그인을 여러 번 사용하도록 설정할 수 있기 때문에 
    // new 연산자를 사용해 호출하여 플러그인의 인스턴스를 만든다
    new HtmlWebpackPlugin({
      template: path.resolve(__dirname, "src", "index.html"),
    }),
    new MiniCssExtractPlugin(),
  ],
};

플러그인을 사용하기 위해서는 require()를 통해 플러그인을 먼저 요청
=> plugins 배열에 사용하고자 하는 플러그인을 추가

대부분의 플러그인은 사용자가 옵션을 통해 지정가능. 다른 목적으로 플러그인을 여러 번 사용하도록 설정할 수 있기 때문에 new 연산자를 사용해 호출하여 플러그인의 인스턴스를 만들어준다.

위의 예제에서 html-webpack-plugin 은 생성된 모든 번들을 자동으로 삽입하여 애플리케이션용 HTML 파일을 생성했다.

mini-css-extract-plugin은 CSS를 별도의 파일로 추출해 CSS를 포함하는 JS 파일 당 CSS 파일을 작성해주게끔 지원한다.

 

Optimization(최적화)

 

Webpack은 버전 4부터는 선택한 항목에 따라 최적화를 실행

module.exports = {
  ...
  optimization: {
    minimizer: [
      new CssMinimizerPlugin(),
    ]
  }
};

최적화하기 위해 다양한 옵션이 지원이 되는데, minimize와 minimizer 이 대표적이다.

  • minimize : TerserPlugin 또는 optimization.minimize에 명시된 plugins로 bundle 파일을 최소화(=압축)시키는 작업 여부를 결정
  • minimizer : defualt minimizer을 커스텀된 TerserPlugin 인스턴스를 제공해서 재정의할 수 있습니다.위의 예제에서는 mini-css-extract-plugin 에 관련된 번들을 최소화하도록 지시하고 있습니다.

 

 

https://dev-yakuza.posstree.com/ko/react/start/

 

Webpack으로 React 시작하기

React(리액트)를 시작하기 위한 Webpack(웹팩)에 관한 설정을 알아보고, 간단하게 React(리액트) 프로젝트를 생성해보겠습니다.

dev-yakuza.posstree.com

https://velog.io/@seul_/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%9B%B9%EC%95%B1-%EB%B2%88%EB%93%A4%EB%A7%81-%ED%9B%84-%EB%B0%B0%ED%8F%AC%EC%9B%B9%ED%8C%A9%EC%9C%BC%EB%A1%9C-CRA%EC%97%86%EC%9D%B4-%EB%A6%AC%EC%95%A1%ED%8A%B8-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95

728x90
반응형
profile

Kimsora✨

@sorarar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그

WH