[Node.js] Express에 Webpack 구현하기

2022. 9. 28. 14:35·Node.js/실험실
목차
  1. 0. 준비사항 
  2. 1. npm 프로젝트 생성
  3. 2. Babel 구성 
  4. 3. Webpack 구성 
  5. 4. package.json 설정
  6. 5. express 설정
반응형

0. 준비사항 

본인은 프로젝트를 구성할 때 express-generator를 사용하기 때문에 먼저 설치를 해야한다. 

npm i -g express-generator

express-generator는 자동으로 express 환경울 구성해주는 멋진 도구이다. 

 

1. npm 프로젝트 생성

// express 프로젝트명 --view=템플릿
express webpackProject --view=ejs

cd webpackProject
npm i

express-generator를 설치하면 express 명령어를 사용할 수 있는데, 원하는 프로젝트명을 입력하고 

원하는 템플릿을 입력해주면 된다. 

 

템플릿에는 pug, ejs 등이 있는데, 본인은 pug알못이기 때문에 ejs를 사용해서 설치했다. 

명령어를 실행하면 위와 같이 폴더 구조가 형성된다. 

이제 필요한 프로젝트 생성은 완료했다. 

 

2. Babel 구성 

npm i @babel/core @babel/preset-env --save-dev
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "target": "> 0.25%, not dead",
        "useBuiltIns": "usage",
        "corejs": { "version": 3 }
      }
    ]
  ]
}

필요한 패키지를 설치하고 babel.config.json 파일에 위와 같이 설정해준다. 

 

3. Webpack 구성 

npm install webpack webpack-cli --save-dev

기본적으로 웹팩을 사용하기 위해서 필요한 패키지를 설치했다. 

 

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./public/javascripts/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
  // ...
};

entry는 압축하기 위해서 입력받을 자바스크립트 파일을 넣어주면 되고 

output에는 webpack을 사용한 결과물의 위치를 지정해준다. 

 

이제 본격적으로 webpack이 다양한 타입을 이해하고 처리할 수 있게 변환하는 설정을 한다. 

npm i --s-d sass-loader css-loader style-loader babel-loader

 

const path = require("path");

module.exports = {
  mode: "development",
  entry: "./public/javascripts/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        use: "babel-loader",
        exclude: /node_modules/,
      },
      {
        test: /\.scss$/i,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
    ],
  },
  plugins: [],
};

js 파일을 읽기 위해서 babel-loader를 사용하는데, node_modules 폴더의 파일은 제외시켰다. 

그리고 css를 입력받기 위해서 그 외 loader를 입력받았는데, 

sass-loader -> css-loader -> style-loader 순으로 변경시킨다. 

 

4. package.json 설정

// ...

  "scripts": {
    "start": "NODE_ENV=production webpack && NODE_ENV=production  nodemon ./bin/www",
    "dev": "NODE_ENV=development nodemon ./bin/www",
    "build": "NODE_ENV=production webpack"
  },
  
 // ...

설정을 다하면 build에 webpack으로 변환을 시키는 코드를 작성한다. 

그리고 명령어를 실행했을 때 dist 폴더에 번들링된 파일이 존재하는지 확인하면 된다. 

 

5. express 설정

npm i webpack-dev-middleware -D
// ...

if (process.env.NODE_ENV === "development") {
  app.set("views", path.join(__dirname, "views"));
  app.set("view engine", "ejs");

  app.use(webpackDevMiddleware(compiler, {}));
}
if (process.env.NODE_ENV === "production") {
  app.set("views", path.join(__dirname, "public"));
  app.engine("html", require("ejs").renderFile);
  app.set("view engine", "html");

  app.use(express.static(path.resolve(__dirname, "public")));
}


// ...

webpack-dev-middleware는 웹서버와 웹팩 개발 서버를 한 프로젝트에서 만들 때 사용한다. 

development일 때 사용하는데, 실제 webpack 번들링한 파일을 만들진 않고 내부적으로 만든 코드를

사용한다. 

 

그래서 프론트엔드 코드가 변경되더라도 매번 미들웨어에 의해서 웹팩을 실행한다. 

 

하지만 운영환경의 경우 코드가 변경될 일이 없기 때문에 빌드한 결과물을 public에 담아서 

정적 파일을 제공한다. 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Node.js > 실험실' 카테고리의 다른 글

[Node.js] TypeScript 와 Express  (0) 2022.10.18
[Node.js] Express ORM 세팅해보기  (0) 2022.10.09
[Node.js] Express set "views"  (2) 2022.09.26
[Node.js] Zoom 클론코딩 - 채팅방편  (1) 2022.06.21
[Node.js] Zoom 클론코딩 - 채팅편  (1) 2022.06.08
  1. 0. 준비사항 
  2. 1. npm 프로젝트 생성
  3. 2. Babel 구성 
  4. 3. Webpack 구성 
  5. 4. package.json 설정
  6. 5. express 설정
'Node.js/실험실' 카테고리의 다른 글
  • [Node.js] TypeScript 와 Express
  • [Node.js] Express ORM 세팅해보기
  • [Node.js] Express set "views"
  • [Node.js] Zoom 클론코딩 - 채팅방편
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    typescript
    바질
    CSS
    네트워크
    다이소
    react
    식물
    리얼클래스
    알고리즘
    자바스크립트
    덤프
    영어회화
    javascript
    Node.js
    CCNA
    webpack
    네이버 부스트캠프
    타일러영어
    리액트
    프로그래머스
    타입스크립트
    redux
    ReactNative
    Babel
    바질 키우기
    리얼학습일기
    ChatGPT
    Docker
    영어독학
    next.js
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[Node.js] Express에 Webpack 구현하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.