728x90
반응형

이전 포스팅에서는 웹팩에 바벨을 적용해보았습니다.

그리고 바벨이 왜 중요한지에 대한 이유도 알아보았고요.

바벨이 필요한 이유는 자바스크립트의 버전이 점점 올라가면서

다양한 함수들을 구현하여 코드를 더 간편하게 작성할 수 있게 되었습니다.

하지만 브라우저 간에 호환이 안 되는 문제점이 발생하면서

바벨의 중요성은 더욱 부각되었죠

 

더 상세한 이야기가 궁금하시다면 아래의 이전 포스팅을 보시면 됩니다.

 

 

2022.08.11 - [IT_Web/Webpack] - 웹팩 바벨 설치 및 활용 webpack에서 babel이 필요한 이유는?

 

웹팩 바벨 설치 및 활용 webpack에서 babel이 필요한 이유는?

이전 포스팅에서는 HTML, Javascript, css 파일을 웹팩에서 배포 시 압축하는 방법을 알아보았습니다 혹시 못보신분이 계시다면 아래의 링크를 통해 보실 수 있습니다 2022.08.02 - [IT_Web/Webpack] - 웹팩 CSS

tantangerine.tistory.com

 

 

이전 포스팅부터 따라오셨다면

기존 코드들이 있으실 겁니다 

그 코드를 리액트로 만들어보겠습니다

 

 

리액트로 바벨을 적용해야 하기 때문에 리액트 관련 바벨을 추가하며,

리액트 관련 라이브러리를 추가하겠습니다

 

 

npm i --save-dev @babel/preset-react react react-dom

 

 

.babelrc 파일에

@babel/preset-react를 코드 추가하여 줍니다.

 

 

.babelrc

{
 "presets": ["@babel/preset-env", "@babel/preset-react"]
}

 

 

web.common.js 파일에서

jsx문법을 추가해 주시면 됩니다.

 

web.common.js 

module.exports = {
    entry: "./src/index.js",
    module: {
        rules: [
            {......},
 			{......},
            {
                test: /\.(js|jsx)$/, // 추가
                exclude: /node_modules/,
                use: {
                    loader: "babel-loader"
                }
            }
        ]
    }
};

 

 

그리고 이제 기존에 html 파일에

React로 변경된 파일들을 적용해야 합니다

 

우선 app.js를 만들어서 index.js와 html 파일에 적용을 해줍니다

 

import React from 'react';
import ReactDOM from "react-dom";

const App = () => {
    return (
        <div>
       		<h1>React Title</h1>
        </div>
    );
};

export default App;

const wrapper = document.getElementById("app");
wrapper ? ReactDOM.render(<App />, wrapper) : false;

 

 

위의 파일을 만들어서 index.js에

컴포넌트로 전달합니다

 

 

import { btnChange } from "./app/btn";
import { changeColor } from "./app/color";
import "./css/main.css";
import App from "./js/App"; // 추가

btnChange.addEventListener("click", function() {
 changeColor("pink");
})

 

 

 

html 파일에도 코드를 추가하여줍니다

이렇게 하면 리액트가 추가됩니다

그다음은 app.js에서 리액트 라이브러리를 추가하여 코드를 작성하여

리액트 관련 개발을 하면 되겠습니다 

 

 

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
        <h1 class="card-title">Card Title</h1>
        <button class="btn-change">버튼 변경</button>
        <img src="./assets/funnelback.png">
        <div id="app"></div> /* 코드 추가 */
    </body>
</html>

 

 

 

 

오늘은 정말 간단한 시간을 가졌습니다

바벨 적용도 그냥 한 줄의 라이브러리 설치와 

한 개의 파일만 만들면 간단하게 적용이 되며 설치가 됩니다

 

오늘은 이렇게 설치가 간단하게 된다는 걸 알면 조금 허무하긴 하네요

 

아무튼 그래도 이런 방법을 아는 것도 중요한 공부라고 생각합니다

그럼 다음 포스팅도 기대해주시고

 

대모험이 끝나는 그날까지 파이팅합시다!!

 

 

 

 

 

728x90
반응형
728x90
반응형

 

이전 포스팅에서는 HTML, Javascript, css 파일을

웹팩에서 배포 시 압축하는 방법을 알아보았습니다

 

혹시 못보신분이 계시다면 아래의 링크를 통해 보실 수 있습니다

2022.08.02 - [IT_Web/Webpack] - 웹팩 CSS와 html 및 webpack 활용해서 JS파일 압축하기

 

웹팩 CSS와 html 및 webpack 활용해서 JS파일 압축하기

이전 포스팅에서 웹팩에서 빌드 파일 자동 삭제 및 이미지 로딩시간을 단축하기 위해 빌드할 경우 CSS파일을 생성하는 것을 알아보았습니다 아직 못 보신 분들은 아래의 링크로 확인해 보시길

tantangerine.tistory.com

 


 

 

바벨(babel)이란?

 

바벨은 자바스크립트의 컴파일러입니다

그래서 최신버전의 자바스크립트 코드를 이전 버전의 코드로 변환시켜주는 도구입니다

하지만 몇몇 사람들은 이전 버전으로 코드 변환이 왜 필요한지에 대해 의문을 가지기도 합니다

 

그 이유는 우리가 사용하는 브라우저의 버전에 따라 자바스크립트의 호환 안될 수도 있기 때문입니다 

아래는 자바스크립트 함수인 map입니다

보시면 브라우저 별로 버전에 따라 호환되는 것이 다를 수 있기 때문입니다

그래서 만약 사용자의 버전이 낮거나 한다면 에러가 발생하게 됩니다

그렇기 때문에 바벨로 이전 버전의 낮은 버전으로 변경하여

모든 사용자 사용하기 위함입니다

 

그럼 본론으로 바벨 설치 및 설정법을 알아보겠습니다

 

https://caniuse.com/

왜바벨이필요한가
바벨이 필요한 이유

 

 


 

바벨의 라이브러리 종류 및 설치

  • @babel/core : 바벨 사용 시 필수 라이브러리
  • @babel/preset-env : ES5 트랜스 파일러
  • @babel/polyfill : ES6 새로운 객체와 메서드 사용 처리
  • @babel/plugin-proposal-class-properties : Class 사용 가능 처리
  • babel-loader : 바벨과 웹팩을 이용해 자바스크립트 파일을 트랜스파일

 

 

바벨에 필요한 라이브러리를 설치하도록 하겠습니다

npm i --save-dev @babel/core @babel/preset-env @babel/polyfill
npm i --save-dev babel-loader

 

 

반응형

 

바벨(babel) 설정하기

 

 

 

.babelrc 라는 파일을 만들게 됩니다

위의 파일명 babelrc 앞에 (. ) 콤마가 존재하는걸 꼭 확인하세요

 

 

.babelrc

{
 "presets": ["@babel/preset-env"],
 // 아래 플러그인 설치할 경우 추가
 // "plugins": ["@babel/plugin-proposal-class-properties"]
}

 

 

 

webpack.common.js 파일에 rules를 추가해줍니다

 

module.exports = {
  entry: "./src/index.js",
  module: {
    rules: [
      {
        test: /\.html$/,
        use: ["html-loader"],
      },
      {
        test: /\.(svg|png|jpg|gif)$/,
        use: {
          loader: "file-loader",
          options: {
            name: "[name].[hash].[ext]",
            outputPath: "imgs",
          },
        },
      },
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: "babel-loader",
        },
      }, // 추가 부분
    ],
  },
};

 

 

아래와 같은 추가 부분의 뜻은

노드 모듈에 있는 자바스크립트 파일은 제외를 하고 

모든 js파일은 바벨을 적용하겠다는 rules를 추가한다는 뜻입니다

 

바벨적용
바벨 적용 코드

 

아래와 같이 function, var을 확인할 수 있습니다

이렇게 낮은 버전도 사용할 수 있는 코드들로 변환시켜

사용자의 범용성을 키우는 기능이라고 할 수 있다

 

바벨결과코드
바벨이 적용된 js 배보 파일

 


 

 

이렇게 바벨을 설치하고 설정하는 방법을 알아보았습니다

바벨은 정말 필수이니까 바벨이 무엇인지

어떤 동작을 하는지는 꼭 알아두어야겠지요?

 

그럼 지금까지 바벨의 설치 및 설정 방법 그리고 바벨이 필요한 이유까지 알아보았습니다.

인프라적인 요소가 있지만 이러한 환경설정을 하는 것도 필요한 부분이 많습니다

알아두면 언젠가는 필요한 날이 있을 거라 생각합니다

 

그럼 지금까지의 대모험은 끝이 났습니다

하지만 앞으로도 수많은 대모험이 기다리고 있으니

파이팅 하시고

같이 앞으로 나아가 보아요!

 

그럼 다음 포스팅도 기대해주세요~

728x90
반응형
728x90
반응형

 

이전 포스팅에서 웹팩에서 빌드 파일 자동 삭제 및 

이미지 로딩시간을 단축하기 위해

빌드할 경우 CSS파일을 생성하는 것을 알아보았습니다

 

 

아직 못 보신 분들은 아래의 링크로 확인해 보시길 바랍니다

2022.08.01 - [IT_Web/Webpack] - 웹팩 빌드시 파일 자동 삭제 및 webpack build시 CSS파일 생성

 

웹팩 빌드시 파일자동 삭제 및 webpack build시 CSS파일 생성

이전 포스팅에서는 이미지 관련 파일 적용과 실시간 코드 반영을 설정하는 법을 알아보았습니다 이제 build시 파일 자동 삭제 및 웹팩 초기 설정 방법 2022.07.23 - 자바스크립트 파일을 하나로 Webpac

tantangerine.tistory.com

 

 

CSS 압축하기

 

우선 필요한 라이브러리를 설치합니다

 

 

npm i optimize-css-assets-webpack-plugin --save-dev

 

아래와 같이 추가 부분을  확인하시고 코드를 수정합니다

 

webpack.prod.js

onst OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin'); // 추가부분

module.exports = merge(common, {
    mode: "production",
    output: {……},
    optimization: {
        minimizer: [
            new OptimizeCssAssetsPlugin()
        ]
    },// 추가 부분
    plugins: [……],
    module: {……}
});

 

 

npm run build를 실행하면

CSS 파일은 압축되지만 JS파일은 압축이 해제됩니다

그래서 추가적으로 라이브러리를 한 개더 사용합니다

 

그럼 아래의 라이브러리를 설치합니다

 

npm i terser-webpack-plugin --save-dev

 

 

그리고 추가적으로 코드 작업을 아래와 같이 진행합니다

 

 

webpack.prod.js

const TerserPlugin = require('terser-webpack-plugin'); // 추가부분

module.exports = merge(common, {
    mode: "production",
    output: {
        filename: "[name].[contentHash].bundle.js",
        path: path.resolve(__dirname, "dist")
    },
    optimization: {
        minimizer: [
            new OptimizeCssAssetsPlugin(),
            new TerserPlugin()
        ]
    }, // 추가 부분
    plugins: [……],
    module: {……}
});

 

 


 

html 파일 압축하기

 

html 파일을 압축해보겠습니다

common 파일 안에 htmlWebpackPlugin 관련 코드를 dev안으로 옮겨줍니다.

 

 

const path = require("path");
module.exports = {
    entry: "./src/index.js",
    module: {
        rules: [
            {
                test: /\.html$/,
                use: ["html-loader"]
            },
            {
                test: /\.(svg|png|jpg|gif)$/,
                use: {
                	loader: "file-loader",
                    options: {
                        name: "[name].[hash].[ext]",
                        outputPath: "imgs"
                    }
                }
            }
        ]
    },
    /*plugins: [
    	new HtmlWebpackPlugin({
 			template: "./src/template.html"
 	})] 잘라내기 dev파일로 옮기기*/
};

 

 

잘라내기한 코드를 아래와 같이 붙여줍니다

 

 

webpack.dev.js

const HtmlWebpackPlugin = require('html-webpack-plugin');// 추가부분

module.exports = merge(common, {
    mode: "development",
    output: {……},
    module: {……},
    plugins: [
    	new HtmlWebpackPlugin({
    		template: "./src/template.html"
    })]// 추가부분
})

 

그리고 아래와 같이 추가하여 코드를 마무리합니다

이렇게 하면 끝입니다

 

 

webpack.prod.js

const HtmlWebpackPlugin = require('html-webpack-plugin'); //추가부분

module.exports = merge(common, {
    mode: "production",
    output: {……},
    optimization: {
        minimizer: [
        	new OptimizeCssAssetsPlugin(),
        	new TerserPlugin(),
            new HtmlWebpackPlugin({
                template: "./src/template.html",
                minify: {
                    removeAttributeQuotes: true,
                    collapseWhitespace: true,
                    removeComments: true
                }
            })// 추가 부분
        ]
    },
    plugins: [……],
    module: {……}
})

 

 

 

이것으로 웹팩을 활용하여 CSS, HTML, JS파일 압축하는 방법을 알아보았습니다

간단하면서도 어려운 것 같네요

 

이제까지 진행된 총 8개의 포스팅이 있습니다

앞으로 4개 정도 더 있습니다

이전 포스팅이 궁금하시다면 카테고리의 webpack을 클릭하셔서 보실 수 있습니다

 

그럼 오늘도 공부하느라 고생하셨습니다

그럼 끝까지 파이팅 하세요

 

대모험의 끝을 봐야겠죠? ㅎㅎ

 

그럼 다음 포스팅에서 봐요~

 

728x90
반응형
728x90
반응형

 

 

이전 포스팅에서는 이미지 관련 파일 적용과

실시간 코드 반영을 설정하는 법을 알아보았습니다

이제 build시 파일 자동 삭제 및 CSS파일을 생성하는 방법을 알아보도록 하겠습니다

 

이제 것 많은 웹팩을 만들기 위해 많은 7개의 포스팅을 했습니다

이전 포스팅들을 확인하고싶으시면 카테고리 webpack을 클릭하시면

보실 수 있습니다

 

 

이전 포스팅은 아래에 링크로 걸어 두도록 하겠습니다

 

2022.07.27 - [IT_Web/Webpack] - 웹팩 실시간 코드 반영 및 Webpack file-loader 이미지 파일 적용하기

 

웹팩 실시간 코드 반영 및 Webpack file-loader 이미지 파일 적용하기

이전 포스팅에서 개발, 운영, 공통 파일을 만들어서 관리하는 기능을 알아보았습니다 궁금하시다면 밑에 목차에서 5번을 클릭해서 확인하시길 바랍니다 웹팩 초기 설정 방법 2022.07.23 - 자바스크

tantangerine.tistory.com

 

 

 

현재 상태에서 build하면 새로운 js파일이 생성됩니다.

이렇게 생성된 파일은 불필요한 파일이라서 자동 삭제하는 방법을 알아보겠습니다

 

 


 

 

clean-webpack 기능 설정하기

 

 

 

우선 아래의 코드로 라이브러리를 설치합니다

 

pm i clean-webpack-plugin --save-dev

 

 

그리고 아래와 같이 webpack.prod.js파일을 수정합니다

그리고 npm run build을 한다면 파일이 한개만 생성되는 것을 확인할 수 있습니다.

 

 

const path = require("path");
const common = require('./webpack.common');
const { merge } = require('webpack-merge');

const { CleanWebpackPlugin } = require('clean-webpack-plugin'); //추가부분

module.exports = merge(common, {
    mode: "production",
    output: {
        filename: "main.[contentHash].js",
        path: path.resolve(__dirname, "dist")
    },
    plugins: [new CleanWebpackPlugin()] //추가부분
});

 

 

 


 

mini-css-extract-plugin 기능 설정하기

 

자바스크립트는 인터프린터언어라서 해석해주는 단계가 있기 때문에 CSS 적용하기까지 어느 정도의 시간이 소요된다

그래서 빌드를 할때에도 CSS 파일로써 디자인을 적용하는 방법인

mini-css-extract-plugin 라이브러리를 사용해서 문제를 해결합니다

 

 

우선 아래와 같이 코드를 수정하여 주시길 바랍니다

 

webpack.common.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require("path");
module.exports = {
    entry: "./src/index.js",
    module: {
        rules: [
            /*{
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            },이 부분은 잘라내기하여 webpack.dev.js에 붙여넣습니다*/
            {
                test: /\.html$/,
                use: ["html-loader"]
            },
            {
                test: /\.(svg|png|jpg|gif)$/,
                use: {
                    loader: "file-loader",
                    options: {
                        name: "[name].[hash].[ext]",
                        outputPath: "imgs"
                    }
                }
         	}
        ]
    },
    plugins: [
    	new HtmlWebpackPlugin({
    		template: "./src/template.html"
    	})
    ]
};

 

 

개발 버전에서는 문제가 되지 않아 기존 작업을 유지합니다

 

 

webpack.dev.js

module.exports = merge(common, {
    mode: "development",
    output: {......},
    module: {
        rules: [
            {
                test: /\.css$/,
                use: ["style-loader", "css-loader"]
            }
        ]
    } // webpack.common.js 파일의 css 모듈을 여기에다 붙여넣는다
});

 

 

운영에서 배포할 때가 중요합니다

CSS파일로써 디자인을 적용하기 위해 아래와 같이 코드 수정을 합니다

 

 

webpack.prod.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 추가 부분
module.exports = merge(common, {
    mode: "production",
    output: {......},
    plugins: [
        new MiniCssExtractPlugin({filename: "[name].[contentHash].css"}),
        new CleanWebpackPlugin()
    ], // 추가 부분
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, "css-loader"]
            }
        ]
    } // 추가 부분
});

 

 이렇게 설정을 하게 되면

빌드를 실행할 경우 CSS파일이 생성되는 것을 확인할 수 있습니다

 

그럼 다음 포스팅에서는 빌드를 실행할 경우  CSS, HTML, JS 파일을 하는 방법을 알아보겠습니다

이렇게 또 한 걸음씩 나아가네요!

 

꾸준히 하다 보면 달라진 우리들 모습을 볼 수 있겠죠!?

그럼 파이팅 하시고 

다음 포스팅도 기대해주세요!

 

우리 모험은 끝나지 않았습니다!

 

 

 

728x90
반응형
728x90
반응형

이 전 글에서 캐시 무효화를 알아보았습니다

못 보신 분이 계시다면

아래의 링크를 확인해보세요

 

2022.07.26 - 웹팩(Webpack) 번들링 파일 자동연결 기능 사용하기(캐시 무효화 문제 해결하기)

 

웹팩(Webpack) 번들링 파일 자동연결 기능 사용하기(캐시 무효화 문제 해결하기)

이전 글에서는 캐시 무효화 작업할 수 있게 webpack.config.js에 코드를 수정하는 방법을 알아보았습니다 이전 글에 대한 리스트가 있으니 못보셨다면 확인해보세요 웹팩 초기 설정 방법 2022.07.23 -

tantangerine.tistory.com

 

그 외에도 웹팩을 설정하기위한 단계별 포스팅이 있으니 참고 하시길바랍니다

그럼 본론으로 넘어가보겠습니다

 

 


 

Webpack-merge란?

 

이제 본론으로 넘어갑시다

앱을 개발이 끝나고 운영을 넘어가게 되면

개발과 운영을 분리하여 관리하는 게 더욱 효과적입니다

이때 웹팩에서 분리하여 관리가 가능합니다

 

이 작업을 위해서는 공통 파일과 다른 파일을 연동시키기 위한 새로운 라이브러리가 필요합니다

그것이 webpack-merge입니다

 

 


 

 

Webpack-merge 기능 활용 및 설정

아래와 같이 라이브러리를 설치합니다

 

npm i webpack-merge --save-dev

 

 

 

그리고 필요한 파일들을 생성합니다

webpack.common.js, webpack.dev.js, webpack.prod.js

 

 

 

 

webpack.common.js

이 파일은 웹팩의 초기 설정값을 담당합니다

common의 설정값을 dev, prod에게 merge를 하게 됩니다

 

const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");

module.exports = {
  entry: "./src/index.js",
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./src/template.html",
    }),
  ],
};

 

 

 

 

webpack.dev.js

아래의 코드를 보면 common에서 설정된 플러그인과 entry, module 등이 없는 것을 확인할 수 있습니다

개발은 캐시 무효화가 필요 없기 때문에 캐시 무효화 기능은 삭제합니다

 

const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");

module.exports = merge(common, {
  mode: "development",
  output: {
    filename: "main.js",
    path: path.resolve(__dirname, "dist"),
  },
});

 

 

 

 

webpack.prod.js

아래의 코드에서 캐시무효화 작업이 포함된 것을 확인할 수 있습니다

 

const path = require("path");
const common = require("./webpack.common");
const { merge } = require("webpack-merge");

module.exports = merge(common, {
  mode: "production",
  output: {
    filename: "main.[contenthash].js",
    path: path.resolve(__dirname, "dist"),
  },
});

 

 

 

 

package.json

package.json 코드를 수정합니다

개발의 소스코드와 운영의 소스코드를 개별적으로 관리하여

운영에서 필요한 소스코드를 우선적으로 개발에서 수정하여

테스트를 거쳐 사이드 이펙트가 있는지 확인하기 유용한 기능입니다

 

  "scripts": {
    "start": "webpack --config webpack.dev.js",
    "build": "webpack --config webpack.prod.js"
  },

 

 

 

이렇게 개발, 운영을 분리하여 관리하는 

webpack-merge 기능의 설정하는 방법을 알아보았습니다

 

이번 웹팩 포스팅은 그렇게 길지 않아서 피로도가 그렇게 높지는 않네요

다음 포스팅은 개발 서버에서 코드가 변경될 경우 실시간으로 반영하는 기능과

빌드를 실행할 경우 CSS 파일 생성하여 로딩시간을 단축하는 방법을 알아보겠습니다

 

또 한,

아직 많은 기능들이 남아있으니

앞으로 많은 기대부탁드립니다

그럼 힘내시고 대모험을 즐겨 보아요~

 

파이팅!!

 

 

 

 

 

728x90
반응형
728x90
반응형

이전 포스팅에서 프로젝트 시 유용한 기능인

개발, 운영, 공통 파일을 만들어서 개별적인 관리할 수 있게 하는 방법을 알아보았습니다

 

궁금하시다면 아래의 링크를 확인하시길바랍니다

이외에도 웹팩을 처음부터 끝까지 만들어가는 과정을 담기 위해

꾸준히 포스팅을 하고 있으니 카테고리 webpack을 클릭하시면

전체 과정을 보실 수 있습니다

 

 


 

  1. Splitting Dev & Production 
 

웹팩(Webpack) - 개발, 운영, 공통 파일 분리하여 관리하는 Webpack-merge 설치 및 활용

이 전 글에서 캐시 무효화를 알아보았습니다 못 보신 분이 계시다면 아래의 링크를 확인해보세요 2022.07.26 - 웹팩(Webpack) 번들링 파일 자동연결 기능 사용하기(캐시 무효화 문제 해결하기) 웹팩(We

tantangerine.tistory.com

 


 

webpack-dev-server 실시간 코드 반영 기능 적용하기

 

우선 실시간 코드 반영에 필요한

라이브러리 설치합니다

 

npm i webpack-dev-server --save-dev

 

 

아래와 같이 webpack-dev-server, --open을 적용하여 파일을 수정합니다

 

 

 

package.json

 "scripts": {
 	"start": "webpack-dev-server --config webpack.dev.js --open", // 수정부분
 	"build": "webpack --config webpack.prod.js"
 }

 

 

이때 개발을 실행시키기 전에 dist폴더를 삭제 하합니다

이제부터는 개발에서는 새로운 폴더를 만들지 않고

로컬 서버를 실행시킬 수 있습니다

 

npm start를 합니다

그렇게 되면 서버 재시작을 하지 않고

실시간으로 코드가 반영되는 걸 확인할 수 있습니다

 

이렇게

실시간 코드 반영은 간단하게 적용할 수 있습니다

 

 


 

 

html-loader, file-loader 이미지 파일 적용하기

 

html-loader, file-loader 라이브러리의 공식 홈페이지는

사이드바에 아래의 이미지처럼 구성되어있습니다

들어가시면 확인이 가능합니다

검색창에 file-loader, html-loader을 검색하시면 됩니다

 

webpack-document
웹팩공식문서

 

 

이미지 파일을 폴더에 넣어 준비합니다

아래와 같이 형성되어있으니 확인해 주세요

 

webpack-list
폴더구조

 

로더 라이브러리를 설치해줍니다

아래와 같이 추가합니다

 

 

 

npm i html-loader file-loader --save-dev

 

 

 

template.html 파일을 수정합니다

<img src="./assets/file-loader">를 추가하여

이미지를 불러올 준비를 합니다

 

<!DOCTYPE html>
<html lang="en">
  <head> </head>
  <body>
    <h1 class="card-title">웹팩 활용법</h1>
    <button class="btn-change">버튼 변경</button>
    <img src="./assets/file-loader.png" /> 
  </body>
</html>

 

 

이제 webpack-common.js를 수정합니다

 

각각 라이브러리를  testuse에 값을 할당하여

라이브러리를 불러옵니다

 

 

 

 

반응형

 

 

 

그리고 이미지도 사용할 확장자를 지정하면

그에 맞는 확장자만 불러올 수 있습니다

 

const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");

module.exports = {
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.html$/,
        use: ["html-loader"],
      },
      {
        test: /\.(svg|png|jpg|gif)$/,
        use: {
          loader: "file-loader",
          options: {
            name: "[name].[hash].[ext]",
            outputPath: "imgs",
          },
        },
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: "./src/template.html",
    }),
  ],
};

 

 

속성 값은 아래와 같은 여러 값들을 적용해보고 알아보아요

 

  • limit : 파일 사이즈가 10k(설정값) 보다 작은 경우 번들로 변환 (Data URI Scheme)
  • fallback : 파일 사이즈가 nk 초과일 시, file-loader 이용하여 파일 복사
  • name : 복사된 파일을 지정 경로/파일명으로 저장
    • [name]: 복사한 파일의 파일명
    • [ext] : 복사한 파일의 확장자명
    • [hash] : 해쉬값
  • outputPath : 복사된 파일이 출력될 위치. 기본 output path 이후의 경로
    (module.exports.output.path = path.resolve(__dirname, 'public/dist')로 설정했기 때문에, 해당 소스에서는 기본 output path가 /public/dist이다.)
  • publicPath : 복사될 파일의 경로. 즉, url을 포함하고 있는 파일(ex:*. scss)의 경로를 기준으로 함. 따라서 url의 첫 부분이 해당 path값을 포함하고 있어야 복사됨

 

 

npm run build를 실행하면

아래와 같이 파일이 생성됩니다

파일 명이 다른 것은 캐시 무효화 작업입니다

무효화는 저번 포스팅 때 알아보았죠?

 

 

file-loader
빌드 후 파일 생성 화면

 

 

 

화면을 실행할 경우 아래와 같이 노출됩니다

이미지가 잘 노출되고 있는 걸 알 수 있습니다

 

 

 

webpack-loader
화면 결과

 

 

이렇게 웹팩 file-loader를 알아보았습니다

그렇게 어렵지는 않은 것 같습니다

 

아 그리고 지금 웹팩의 구축하는 버전은

아래와 같습니다

참고해주세요

 

 

웹팩버전
버전확인

 

그럼 다음에는

clean-webpack & Extract CSS & Minify HTML / CSS / JS를

알아보도록 하겠습니다

 

정말 힘든 대모험을 위해 달려봅시다

 

힘내시고

다음 포스팅에서 뵙겠습니다~

 

파이팅

728x90
반응형
728x90
반응형

 

이전 글에서는 캐시 무효화 작업할 수 있게

webpack.config.js에 코드를 수정하는 방법을 알아보았습니다

 

못 보셨다면 아래의 링크를 클릭해서 보시길 바랍니다

 

또 한,

웹팩의 모든것을 담기 위해 많은 포스팅을 올려놓았으니

카테고리의 webpack을 확인하시면 여러 가지를 보실 수 있습니다

 

 


  1. Cache Busting an Plugins ( 캐시 무효화 )
 

웹팩(Webpack) 번들링 시 캐시 무효화 설정하기 (Cache Busting)

이전 포스팅에서 웹팩 CSS Loader를 설치하고 CSS를 웹팩으로 적용을 해보았습니다 못 보신 포스팅이 있다면 아래의 리스트에서 확인해보시길 바랍니다 웹팩 초기 설정 방법 2022.07.23 - 자바스크립

tantangerine.tistory.com


 

 

html-webpack-plugin 설치 및 활용

 

 

캐시 무효화를 작업하면 파일을 새로 만들게 되면서

index.html의 경로가 변경되어있지 않아 한 가지 문제가 있습니다

 

 

캐시무효화-문제점
캐시무효화의 문제점

 

 

그래서 위의 네모칸에 들어가는 경로를 자동으로 변경해주는 라이브러리가

html-webpack-plugin입니다

 

 

아래와 같이 라이브러리를 설치를 합니다

 

 

npm i html-webpack-plugin --save-dev

 

 

아래와 같이 플러그인의 코드를 추가합니다

 

 

const HtmlWebpackPlugin = require('html-webpack-plugin'); // 추가 부분
const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    filename: "main.[contenthash].js",
    path: path.resolve(__dirname, "dist"),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
  plugins: [new HtmlWebpackPlugin({
  	template: "./src/template.html"
  })] // 추가 부분
};

 

 


 

 

캐시 무효화 문제 해결 하기

 

 

npm start를 하게 되면

아래와 같이 index.html이 변경이 되었습니다

단, 코드가 전체적으로 변경되어서

위의 코드의 웹팩활용법과 버튼이 사라지는 문제가 있습니다 

 

 

 

웹팩-자동연결기능
자동 연결 기능

 

 

아래의 코드를 추가하여 

template.html이라는 새로운 파일을 생성합니다

 

 

캐시무효화-해결법
캐시 무효화 해결법

 

 

template.html

코드를 작성하여주시길 바랍니다

 

<!doctype html>
<html lang="en">
<head>
</head>
<body>
  <h1 class="card-title">웹팩 활용법</h1>
  <button class="btn-change">버튼 변경</button>
</body>
</html

 

 

그리고

npm start를 실행하게 되면

아래와 같이 코드가 변경되어있음을 확인할 수 있습니다

 

 

 

 

캐시무효화-해결결과
캐시 무효화 해결결과

 

 

 

이제 잘 연결되어서 변경되기 전의

코드가 남겨져있는 것을 확인할 수 있습니다

이렇게 조금씩 웹팩을 만들어가니 먼가 성취감도 있고 좋은 것 같네요

 

이제 몇 개 안 남았습니다!

이제 웹팩을 손수 만들 수 있는 그날을 위해 

그럼 다음 글에서 만나겠습니다

 

파이팅!

728x90
반응형
728x90
반응형

 

이전 포스팅에서 웹팩 CSS Loader를 설치하고 CSS를 웹팩으로 적용을 해보았습니다

못 보신 포스팅이 있다면 아래의 리스트에서 확인해보시길 바랍니다

 

 

 

  1. 웹팩 초기 설정 방법
  2. CSS & SASS 적용하기
  3. Cache Busting an Plugins ( 캐시 무효화 )
    • 현재 포스팅입니다
  4. html-webpack-plugin 설치
    • 캐시가 적용된 스크립트 파일을 자동으로 index.html 연결할 때 사용됩니다.
  5. template 파일 생성
  6. Splitting Dev & Production 
  7. webpack-dev-server
  8. 이미지 파일 적용하기 ( html-loader, file-loader ) 
  9. clean-webpack
  10. Extract CSS & Minify HTML / CSS / JS
  11. 바벨 설치하기
  12. 리액트 적용해보기
  13. Multiple Entrypoints & Vendor.js
  14. 여러 페이지별 파일을 번들링 하기

 

 

캐시 무효화란?

CSS 코드를 웹사이트에 캐시 메모리에 저장하여 사용자가 접속했을 때

이전에 저장해둔 메모리를 바탕으로 코드를 불러오며 로딩 시간을 단축합니다

그렇다 보니 간혹 CSS를 수정하면 바로 적용이 안 되는 경우가 발생합니다

그 이유가 바로 그 때문입니다

 

이러한 경우가 발생할 때 

파일명 뒤에 알파벳과 숫자 조합하여 파일을 생성하여

새로운 파일명을 업로드하여

웹사이트에서 새로운 파일이 생성되었다는

인식을 주어 기존의 캐시를 삭제하고

새로운 파일을 저장하는 방법을

그것을 캐시 무효화라고 합니다

 

 

캐시무효화
캐시 무효화하기 위해 만든 파일명

 

 

 

캐시 무효화 코드 수정은 간단합니다

아래와 같이 filename부분을 [contenthash]를 추가만 하면 됩니다

 

 

 

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./src/index.js",
  output: {
    filename: "main.[contenthash].js",
    path: path.resolve(__dirname, "dist"),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader"],
      },
    ],
  },
};

 

 

그럼 번들이 된 파일에는 알파벳과 숫자 조합이 되어

새로운 파일로 계속 갱신해서 생성합니다

단, CSS파일에 코드가 수정되었을 때만

파일명이 새롭게 갱신이 됩니다

 

이렇게 오늘은 웹사이트에서 캐시 메모리에 어떠한 정보를 저장하는지

그 캐시가 어떻게 작동하는지도 알아보고

캐시 무효화가 어떤 이로움을 주는지 확인해 보았습니다

 

앞으로 10가지 항목이 더 남았으니

조금만 더 힘을 내세요!

 

대모험은 이제부터 시작입니다

파이팅

 

 

 

728x90
반응형
728x90
반응형

이전 포스팅에서 웹팩이 무엇인지와

웹팩 초기 설정하는 방법을 알아보았습니다

혹시 못 보셨다면 아래의 포스팅을 참고해주세요.

 

그리고 웹팩에 관해 알아볼 것을 리스트로 정리해보았습니다

 

 


 

웹팩(Webpack) 공부 목차

 

  1. 웹팩 초기 설정 방법
  2. CSS & SASS 적용하기
    • 현재 포스팅입니다
  3. Cache Busting an Plugins ( 캐시 무효화 )
  4. html-webpack-plugin 설치
  5. template 파일 생성
  6. Splitting Dev & Production 
  7. webpack-dev-server
  8. 이미지 파일 적용하기 ( html-loader, file-loader ) 
  9. clean-webpack
  10. Extract CSS & Minify HTML / CSS / JS
  11. 바벨 설치하기
  12. 리액트 적용해보기
  13. Multiple Entrypoints & Vendor.js
  14. 여러 페이지별 파일을 번들링 하기

 


 

 

목차에 포스팅이 끝나면 내부 링크를 걸도록 하겠습니다

앞으로 많은 설정법을 통해 웹팩을 완벽하게 파헤쳐 봅시다!!

 

 

그럼 다시 본론으로 넘어가서

css적용 하기 이전에 우선 html과 필요한 js파일을 만들도록 하겠습니다 

 

 

CSS적용 전 준비단계

 

src폴더에 app이라는 폴더를 만들어서

button.jscolor.js 파일을 생성해 줍니다

 

 

 

button.js

 

const btnChange = document.querySelector(".btn-change");
export { btnChange };

 

 

color.js

 

const cardTitle = document.querySelector(".card-title");
const changeColor = function (color) {
  cardTitle.style.backgroundColor = color;
};
export { changeColor };

 

 

마지막으로 dist폴더 안에 index.html을 생성합니다

아래의 코드와 함께 말이지요!

 

 

index.html

 

<!DOCTYPE html>
<html lang="en">
  <head>
    ......
  </head>
  <body>
    <h1 class="card-title">웹팩 활용법</h1>
    <button class="btn-change">버튼 변경</button>
    <script src="main.js"></script>
  </body>
</html>

 

 

생성하셨다면 아래와 같이

폴더가 만들어졌겠지요?

 

 

 

웹팩CSS적용
폴더구조

 

 

그럼 지금까지 현재의 html을 실행하게 된다면

 

웹팩적용하기
웹팩 적용 전 이미지

 


 

웹팩(Webpack) CSS loader 설지 및 적용하기

 

 

그럼 이제 웹팩(Webpack)에

CSS를 적용하기 위해서는 CSS Loader 설치 및 적용이 필요합니다

아래 링크 주소에서 웹팩 Loader 종류와 CSS Loader 적용 방법을 확인해 봅시다

 

오른쪽 사이드 바에 공식문서가 링크가 있으니 들어가셔서

검색창에 loaders, css loader 검색하시면 확인하실 수 있습니다

 

웹팩공식문서
웹팩 공식문서 가이드

 

 

Loader는 타입 스크립트와 같은 다른 언어를 자바스크립트로 변경하거나 이미지를 dataURL로 변경할 수 있습니다

CSS 파일을 자바스크립트 모듈에서 직접 import 할 수 있는 방법도 제공합니다

 

 

우선 라이브러리를 설치합니다

 

npm install style-loader css-loader --save-de

 

 

다음 webpack.config.js를 수정합니다

모듈의 오브젝트 객체는 외부 패키지를 사용할 경우에

testuse를 사용해서 외부 패키 지명을 넣어 줍니다

 

이때 중요한 것은 패키지는 뒤에서부터 해석이 된다는 것들을 알고 계셔야 합니다.

그래서 css-loader를 불러온 다음에 style-loader에 적용하여 불러온다는 것을 기억하셔야 합니다.

 

그럼 아래의 코드로 변경해주세요

 

 

const path = require("path");

module.exports = {
 mode: "development",
 entry: "./src/index.js",
 output: {
     filename: "main.js",
     path: path.resolve(__dirname, "dist")
 },
 module: {
     rules: [
         {
             test: /\.css$/,
             use: ["style-loader", "css-loader"]
         }
     ]
 }
};

 

 

 

아래의 이미지에 보시면 css폴더가 보이시나요

그리고 하위 디렉터리 main.css가 생성된 것이 보이실 겁니다

 

 

css폴더경로
css폴더 경로

 

 

 

생성해주고 main.css에는 아래와 같은 코드를 추가하시길 바랍니다

 

body {
  background: yellow;
}

 

 

그렇게 되고 index.html을 실행하게 되면

아래와 같이 css가 적용된 화면이 노출됩니다

 

 

웹팩CSS적용화면
CSS적용 모습

 

 

이것을 응용해서 SASS 적용해보겠습니다

 

SASS 적용하기

 

 

 

아래의 라이브러리를 추가해줍니다

 

npm install sass-loader node-sass --save-dev

 

 

그리고 아래의 코드처럼 sass-loader를 추가해주며

기존 css파일의 확장자명을 scss로 변경해줍니다

 

 

  module: {
    rules: [
      {
        test: /\.css$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
    ],
  },

 

 

동작 순서는 sass-loader -> css-loader -> style-loader가 되니 참고하세요!

 

 

이렇게 CSS loader 설치와 활용 방법을 알아보았습니다

어떻게 보면 정말 간단한데 모르면 정말 힘들겠죠

앞으로 많이 남았으니 같이 힘내 봅시다

 

대모험은 아직 끝나지 않아서 갈길이 너무 멀고도 험난하네요

사실 끝나지 않을 모험이라는 것을 잘 알고 있지만

 

아무튼 파이팅 합시다

 

 

728x90
반응형
728x90
반응형

 


 

웹팩(Webpack)이란?

 

웹팩이란
웹팩의 역할

 

SPA(Single Page Application) 개발이 많아지면서 자바 스크립트의 코드 분량이 크게 증가하여

초기 단계에서 UI 컴포넌트와 자바스크립트의 코드를 분리하여 작업을 수행하였습니다

그렇게 되면서 개별적인 자바스크립트 파일을 불러와 웹사이트 로딩 속도가 문제가 되었습니다

그래서 그 문제의 해결책으로 자바스크립트 파일을 하나의 js파일로 번들링 작업을 하게 되었고

그렇게 새롭게 등장한 웹팩(Webpack)입니다.

 

공식 사이트는 오른쪽 사이드바에 등록해놓겠습니다 

 

이러한 과정에서 웹팩(Webpack)은 번들링 작업에서는 필수적인 기능으로 발전하였습니다

요즘은 프로젝트를 생성할 초기에 자동으로 만들어주기때문에 

관심이 적어지기도 합니다

하지만 중요하고 어떤 과정으로 웹팩이 작동하는지도

한번알아보는것도 정말 중요한 과정입니다

그럼 설치부터 알아볼까요

 

 


 

 

웹팩(Webpack) 설치 및 설정

 

웹팩을 설치하기 위해서는 Node가 필요합니다.

다운로드하는 사이트는 사이드 바에 등록해놓겠습니다

설치 후 아래의 코드를 실행해서 

 

버전을 확인해서 설치유무를 확인해 봅니다

 

npm -v
node -v

 

 

설치가 완료되었으면, 실습용 폴더를 생성한 후

해당 폴더 안에서 npm 초기화 및 웹팩 설치 작업을 진행합니다.

실습용 폴더명 은 webpack을 제외하고,

작성해야 npm 충돌이 일어나지 않는다.

npm init -ypackage.json 생성 시 모든 기본값을 자동으로 채워줍니다

 

 

 

npm init -y
npm install webpack webpack-cli --save-dev

 

 

그리고 package.js 파일에서 script 부분을 수정해 줍니다

 

 

{
     "name": "Webpack_Test",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
         "start": "webpack" // 이부분을 수정한다
      },
     "keywords": [],
     "author": "",
     "license": "ISC",
     "devDependencies": {
         "webpack": "^4.44.1",
         "webpack-cli": "^3.3.12"
     }
}

 

 

 

웹팩(Webpack)으로 빌드하기 위해서는 src폴더 안에서 파일 관리가 이루어져야 합니다.

그럼 src 폴더와 index.js 파일을 생성한 다음 아래와 같이 코드를 작성한다

 

 

 

console.log("Hell World");

 

 

새로운 dist폴더와 함께 main.js파일이 생성되고 압축된 코드가 작성되어있다.

그리고 그 압축된 코드 안에는 console.log("Hell World");

가 포함되어있는 것을 확인할 수 있습니다

 

src폴더 안에 있는 파일들을 바탕으로 번들링 작업이 진행된다는 것을 알고 계시면 됩니다

그래서 src안에서 프로젝트 페이지등 작업이 이루어지게 됩니다

 

 

다음은 dist폴더 안에 index.html 파일을 아래의 코드를 작성해서 생성합니다

 

 

반응형

 

 

<!doctype html>
<html lang="en">
<head>
 ......
</head>
<body>
 <h1 class="card-title">Card Title</h1>
 <button class="btn-change">버튼 변경</button>
 <script src="main.js"></script>
</body>
</html>

 

 

그리고  index.html을 크롬 브라우저로 실핼하게되면

아래와 같은 이미지가 노출되며 콘솔로 hell world가 노출되는 것을

확인할 수 있습니다

 

 

웹팩-실행이미지
웹팩 실행 이미지

 

 

 

 

이제 모든 준비는 완료되었습니다

webpack을 좀 더 설정해봅시다

 

 

webpack.config.js 파일 생성하여 아래 코드를 작성합니다

해당 파일은 모듈이나 플러그인을 관리하는 파일입니다

 

 

module.exports = {
 entry: "./src/index.js",
 
 output: {
 filename: "hello.js",
 path: path.resolve(__dirname, "COOODE")
 }
};

 

  • entry : 압축시킬 파일 
  • output : 압축한 파일을 관리할 폴더와 파일명
  • path : 절대 경로 기준을 폴더 생성 ( 이러한 이유로 __dirname을 사용할 수 있음 )
  • resolve() : 인자로 받은 경로를 하나로 합쳐 문자열 형태로 리턴한다.
  • __dirname : 현재 경로를 의미

 

 

package.json 파일 경로를 기준으로 COOODE 폴더가 생성이 되고,

해당 폴더 안에 만들어진 hello.js 안에는 압축된 형태로 코드가 작성되어있습니다.

 

 

 

 

아래와 같이 다시 명령을 수정해줍니다

이 작업은 웹팩을 사용할 때 내가 설정한 파일의 기준으로 웹팩을 동작시키겠다는 명령어라고 생각합시다

 

 

 

"scripts": {
 "start": "webpack --config webpack.config.js"
 },

 

 

webpack.config.js를 다시 수정합니다

이제는 mode를 추가하며

filename도 우리가 정할수 있습니다

path도 설정이 가능합니다

 

const path = require("path");

module.exports = {
 mode: "development",
 entry: "./src/index.js",
 output: {
     filename: "main.js",
     path: path.resolve(__dirname, "dist")
 }
}

 

development : 개발자 모드로 배포할 때 사용합니다

pathnode.js의 함수인 require을 사용합니다

그리고 output 안에 path를 지정할 수 있는데

이것은 번들링 작업을 한 main.js의 파일을 어느 위치에 있는 폴더 안에 넣을것이을 지정할 수 있습니다

path.resolve(__dirname, 폴더명)이 함수는 프로젝트의 절대 경로를 문자열로 가져와

폴더는 dist로 지정하는 것입니다

dist폴더 안에 main.js를 생성 하게됩니다

 

또 한,

main.js를 확인해보시면 압축이 안되어진 상태일것입니다

그이유는 개발자모드이기 때문입니다

 

 

 

이렇게 웹팩을 설정법을 알아보았습니다

다음에는 CSS파일등은 더욱 많은 것들을 적용해보고

알아보도록 하겠습니다

그럼! 다음 포스팅 봐요!!

 

우리의 대모험은 끝나지않았습니다!!!

728x90
반응형

+ Recent posts

Powered by Tistory, Designed by wallel