html webpack plugin(플러그인 사용법)
개인적인 Webpack 학습 및 공부 내용을 기록하기 위한 포스트입니다.
1. html-webpack-plugin 사용법 기록
앞서 플러그인 사용법을 봤지만 이번에 새로 사용하는 겸 기록해둔다.
var path = require("path");
var HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
mode: "none",
entry: "./index.js",
output: {
filename: "bundle.js",
path: path.resolve(__dirname, "dist"),
},
devServer: {
port: 9000,
},
plugins: [
new HtmlWebpackPlugin({
// index.html 템플릿을 기반으로 빌드 결과물을 추가해줌
template: "index.html",
}),
],
};
HtmlWebpackPlugin 의 경우 정의된 html 파일에 빌드 결과물을 추가해준다.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Webpack Dev Server</title>
</head>
<body>
<!-- 빌드 결과물이 정상적으로 로딩되면 아래 div 태그의 텍스트가 변경됨 -->
<div class="container">TBD..</div>
<!-- HTML Webpack Plugin에 의해 웹팩 빌드 내용이 아래에 추가됨 -->
</body>
</html>
따라서 기존과는 다르게 index.html 에 script 로 결과물을 불러오는 태그가 없는 것을 알 수 있다.
또한, link 태그를 통해 css 결과물을 아래와 같은 테그로 가져와서 페이지에 그려줬어야 했지만 이또한 plugin 이 알아서 해준다.
이러한 플러그인을 잘 사용하면 웹 빌드 환경을 구성하는데 좋을 것 같다.
2. 참고사항
참고사항으로 web-cli 를 통하여 프로젝트를 생성하였을대 webpack.config.js 이다.
아래 소스 중 자세한건 공식홈페이지에서 찾아서 공부하자
var path = require("path");
var webpack = require("webpack");
module.exports = {
// mode 를 production 으로 배포하게 되면 최적화를 웹팩 내에서 진행해준다.
mode: "production",
entry: "./src/main.js",
output: {
path: path.resolve(__dirname, "./dist"),
publicPath: "/dist/",
filename: "build.js",
},
module: {
rules: [
{
// css loader 를 변환하기 위해
test: /\.css$/,
use: ["vue-style-loader", "css-loader"],
},
{
// vue 확장 파일에 대해 loader 를 돌림
test: /\.vue$/,
loader: "vue-loader",
options: {
loaders: {},
// other vue-loader options go here
},
},
{
// javascript 의 최신 문법들을 모든 브라우저가 호환할 수 있게 변환해준다.
test: /\.js$/,
loader: "babel-loader",
// 이 부분은 배제한다.
exclude: /node_modules/,
},
{
// 이미지 확장 파일 loader
test: /\.(png|jpg|gif|svg)$/,
loader: "file-loader",
options: {
name: "[name].[ext]?[hash]",
},
},
],
},
// 파일간의 연관관계를 해석할때 사용
resolve: {
// 별칭
alias: {
vue$: "vue/dist/vue.esm.js",
},
// extensions 에 넣어둔 것들에 대해서 import {} from '.***.js, vue, json'
// 이렇게 확장자 까지 안쳐도 해석해주겠다.
extensions: ["*", ".js", ".vue", ".json"],
},
devServer: {
historyApiFallback: true,
noInfo: true,
overlay: true,
},
performance: {
hints: false,
},
devtool: "#eval-source-map",
};