Bundler/Webpack
Webpack
IT Blue
2021. 7. 5. 05:36
프로젝트 설치
$ npm init -y
$ npm i -D webpack webpack-cli webpack-dev-server@next
설치가 완료되면
package.json 내부에 생성됨
"devDependencies": {
"webpack": 설치된 버전이 명시,
"webpack-cli": 설치된 버전이 명시,
"webpack-dev-server": 설치된 버전이 명시
}
프로젝트 실행
## 세팅 ##
package.json 내부에 "scripts" 수정
"scripts": {
"dev": "webpack-dev-server --mode development",
"build": "webpack --mode production"
}
## 구성 설정 ##
프로젝트 루트 경로에 webpack.config.js 파일 생성
/* webpack.config.js */
const path = require('path')
module.exports = {
// webpack은 js를 진입점으로 사용
// 파일을 읽어들이기 시작하는 진입점 설정
entry: './js/main.js',
// 결과물(번들)을 반환하는 설정
output: {
// 어떠한 경로에다가 결과물을 만들어서 내어줄지 명시 (절대경로)
// 기본값
// path: path.resolve(__dirname, 'dist'),
// 결과물의 파일의 이름
// 기본값
// filename: 'main.js',
// 기존의 만들었던 내용 제거
clean: true
}
}
Plugins
## HTML 연동을 위해 설치 ##
$ npm i -D html-webpack-plugin
webpack.config.js 파일에 내용 추가
/* webpack.config.js */
const path = require('path')
// 추가된 부분
const HtmlPlungin = require('html-webpack-plugin');
module.exports = {
entry: './js/main.js',
output: {
clean: true
},
// 추가된 부분
// 번들링 후 결과물의 처리 방식 등 다양한 플러그인들을 설정
plugins: [
new HtmlPlungin({
template: './index.html'
})
]
}
정적 파일 연결
dist 폴더로 자동으로 넣어줄 수 있는 패키지를 설치한다
## 패키지 설치 ##
$ npm i -D copy-webpack-plugin
webpack.config.js 파일에 내용 추가
/* webpack.config.js */
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {
plugins: [
new CopyPlugin({
patterns: [
// 만들어놓은 폴더의 이름을 명시
{ from: 'static'}
]
})
]
}
Module (CSS, SCSS 연결)
# Loader #
# 자바스크립트 파일이 아닌 웹 자원(HTML, CSS, Images, 폰트 등)들을 변환할 수 있도록 도와주는 속성 #
$ npm i -D css-loader style-loader
$ npm i -D sass-loader sass
package.json 내부에 내용 추가
"browserslist": [
"> 1%",
"last 2 versions"
]
webpack.config.js 파일에 내용 추가
/* webpack.config.js */
module: {
rules: [
{
test: /\.s?css$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}
]
}
/* main.js */
// import '../css/main.css'
import '../scss/main.scss'
Autoprefixer
# CSS 속성의 공급 업체 접두사 (Vender Prefix) 를 사용자의 브라우저에 따라 자동으로 붙여주는 플러그인 #
$ npm i -D postcss autoprefixer postcss-loader
webpack.config.js 파일에 내용 추가
.postcssrc.js 파일 생성 후 내용 추가
/* webpack.config.js */
module: {
rules: [
{
test: /\.s?css$/,
use: [
'style-loader',
'css-loader',
// 추가된 부분
'postcss-loader',
'sass-loader'
]
}
]
},
/* .postcssrc */
// ESM - (improt, export 키워드를 사용하는 방식)
// node.js 에서는 CommonJS 방식을 사용
// import 대신 require() 방식으로 js파일을 외부에서 가져옴
// export 대신 module.exports 방식으로 내용들을 내보내기
module.exports = {
plugins: [
require('autoprefixer')
]
}
Babel
## 패키지 설치 ##
$ npm i -D @babel/core @babel/preset-env @babel/plugin-transform-runtime
$ npm i -D babel-loader
webpack.config.js 파일에 내용 추가
.babelrc.js 파일 생성 후 내용 추가
/* webpack.config.js */
module: {
rules: [
{
test: /\.js$/,
use: [
'babel-loader'
]
}
]
},
/* .babelrc.js */
module.exports = {
presets: ['@babel/preset-env'],
plugins: [
['@babel/plugin-transform-runtime']
]
}
참고
https://webpack.js.org/concepts/
Concepts | webpack
webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.
webpack.js.org