Add Webpack dev-server setting

master
Bobson Lin 3 years ago
parent b3dbef891e
commit 2c0dbb4f08

@ -2,7 +2,8 @@
"scripts": { "scripts": {
"compile:sass": "node-sass src/scss/argon-theme.scss css/argon.css", "compile:sass": "node-sass src/scss/argon-theme.scss css/argon.css",
"build:dev": "webpack --mode=development", "build:dev": "webpack --mode=development",
"watch": "webpack --mode=development --watch" "watch": "webpack --mode=development --watch",
"serve": "webpack serve"
}, },
"dependencies": { "dependencies": {
"bootstrap": "^4.5.3" "bootstrap": "^4.5.3"
@ -14,8 +15,10 @@
"mini-css-extract-plugin": "^1.3.1", "mini-css-extract-plugin": "^1.3.1",
"node-sass": "^5.0.0", "node-sass": "^5.0.0",
"postcss-loader": "^4.1.0", "postcss-loader": "^4.1.0",
"raw-loader": "^4.0.2",
"sass-loader": "^10.1.0", "sass-loader": "^10.1.0",
"webpack": "^5.9.0", "webpack": "^5.9.0",
"webpack-cli": "^4.2.0" "webpack-cli": "^4.2.0",
"webpack-dev-server": "^3.11.0"
} }
} }

@ -5,8 +5,6 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title> <title>Document</title>
<link rel="stylesheet" href="css/spacelab-theme.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.2.1/font/bootstrap-icons.css"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.2.1/font/bootstrap-icons.css">
</head> </head>
@ -21,13 +19,23 @@
<button type="button" class="btn btn-danger">Danger</button> <button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-warning">Warning</button> <button type="button" class="btn btn-warning">Warning</button>
</div> </div>
<div class="mt-2">
<button type="button" class="btn btn-outline-default">Default</button>
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
</div>
<div class="mt-2 card-deck"> <div class="mt-2 card-deck">
<div class="card"> <div class="card">
<img class="card-img-top" src="https://picsum.photos/1000/600" alt="Card image cap"> <img class="card-img-top" src="https://picsum.photos/1000/600" alt="Card image cap">
<div class="card-body"> <div class="card-body">
<h5 class="card-title">Card title</h5> <h5 class="card-title">Card title</h5>
<p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional
content. This content is a little bit longer.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p> <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div> </div>
</div> </div>
@ -43,32 +51,17 @@
<img class="card-img-top" src="https://picsum.photos/1000/600" alt="Card image cap"> <img class="card-img-top" src="https://picsum.photos/1000/600" alt="Card image cap">
<div class="card-body"> <div class="card-body">
<h5 class="card-title">Card title</h5> <h5 class="card-title">Card title</h5>
<p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional content. This card has even longer content than the first to show that equal height action.</p> <p class="card-text">This is a wider card with supporting text below as a natural lead-in to additional
content. This card has even longer content than the first to show that equal height action.</p>
<p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p> <p class="card-text"><small class="text-muted">Last updated 3 mins ago</small></p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Previous">
<i class="fa fa-angle-left"></i>
<span class="sr-only">Previous</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">
<i class="fa fa-angle-right"></i>
<span class="sr-only">Next</span>
</a>
</li>
</ul>
</nav>
<hr>
<div class="container">
<form> <form>
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
@ -117,6 +110,22 @@
</div> </div>
</div> </div>
</form> </form>
</div>
<div id="table-section" class="container">
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link" href="#" aria-label="Previous">«</a>
</li>
<li class="page-item active"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Next">»</a>
</li>
</ul>
</nav>
<table class="table"> <table class="table">
<thead> <thead>
@ -140,7 +149,8 @@
<button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm " data-original-title="" title="">
<i class="ni ni-circle-08 pt-1"></i> <i class="ni ni-circle-08 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm " data-original-title=""
title="">
<i class="ni ni-settings-gear-65 pt-1"></i> <i class="ni ni-settings-gear-65 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm " data-original-title="" title="">
@ -158,7 +168,8 @@
<button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm " data-original-title="" title="">
<i class="ni ni-circle-08 pt-1"></i> <i class="ni ni-circle-08 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm " data-original-title=""
title="">
<i class="ni ni-settings-gear-65 pt-1"></i> <i class="ni ni-settings-gear-65 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm " data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm " data-original-title="" title="">
@ -173,19 +184,24 @@
<td>2010</td> <td>2010</td>
<td class="text-right">&euro; 92,144</td> <td class="text-right">&euro; 92,144</td>
<td class="td-actions text-right"> <td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm btn-simple" data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-info btn-icon btn-sm btn-simple" data-original-title=""
title="">
<i class="ni ni-circle-08 pt-1"></i> <i class="ni ni-circle-08 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm btn-simple" data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-success btn-icon btn-sm btn-simple"
data-original-title="" title="">
<i class="ni ni-settings-gear-65 pt-1"></i> <i class="ni ni-settings-gear-65 pt-1"></i>
</button> </button>
<button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm btn-simple" data-original-title="" title=""> <button type="button" rel="tooltip" class="btn btn-danger btn-icon btn-sm btn-simple" data-original-title=""
title="">
<i class="ni ni-fat-remove pt-1"></i> <i class="ni ni-fat-remove pt-1"></i>
</button> </button>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
</body>
<div class="col-md-6"> <div class="col-md-6">
<div class="card"> <div class="card">

@ -1,35 +1,66 @@
const path = require('path'); const path = require("path");
const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin'); const HtmlWebpackPlugin = require("html-webpack-plugin");
// Ref: https://stackoverflow.com/a/60021512/6133998
const populateHtmlPlugins = (pagesArray) => {
res = [];
pagesArray.forEach((page) => {
res.push(
new HtmlWebpackPlugin({
page,
filename: `${page.toLowerCase()}.html`,
template: `./src/${page.toLowerCase()}.html`,
})
);
});
return res;
};
const pages = populateHtmlPlugins(["index", "cards"]);
module.exports = { module.exports = {
entry: './src/main.js', entry: {
main: ["./src/main.js"],
spacelab: ["./src/scss/spacelab-theme.scss"],
cyborg: ["./src/scss/cyborg-theme.scss"]
},
output: { output: {
path: path.resolve(__dirname, 'dist'), path: path.resolve(__dirname, "dist"),
filename: 'js/[name].js', filename: "js/[name].js",
}, },
resolve: { resolve: {
modules: ['node_modules'], modules: ["node_modules"],
}, },
module: { module: {
rules: [ rules: [
{ {
test: /\.(sa|sc|c)ss$/, test: /\.(sa|sc|c)ss$/,
use: [ use: [
// 取代 style-loader。作用: 提取 js 中的 css 成單獨文件
MiniCssExtractPlugin.loader, MiniCssExtractPlugin.loader,
// 將 css 文件整合倒 js 文件中
"css-loader", "css-loader",
"sass-loader" // 將 sass/scss 編譯成 css
"sass-loader",
], ],
}, },
{
test: /\.html$/,
loader: "raw-loader",
},
], ],
}, },
plugins: [ plugins: [
new MiniCssExtractPlugin({ new MiniCssExtractPlugin({
filename: 'css/[name].css', filename: "css/[name].css",
}),
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html',
}), }),
...pages,
], ],
devServer: {
// contentBase: path.join(__dirname, "dist"),
compress: true,
port: 9000,
open: true,
hot: true,
},
}; };

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save