-
-
Notifications
You must be signed in to change notification settings - Fork 667
Expand file tree
/
Copy pathwebpack.config.tpl
More file actions
100 lines (95 loc) · 3.9 KB
/
webpack.config.tpl
File metadata and controls
100 lines (95 loc) · 3.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Generated using webpack-cli https://github.com/webpack/webpack-cli
import path from "node:path";
import { fileURLToPath } from "node:url";
<% if (langType === "Typescript") { %>import { Configuration } from "webpack";
<% if (devServer) { %>import "webpack-dev-server";<% } %><% } %>
<% if (htmlWebpackPlugin) { %>import HtmlWebpackPlugin from "html-webpack-plugin";<% } %><% if (extractPlugin !== "No") { %>
import MiniCssExtractPlugin from "mini-css-extract-plugin";<% } %><% if (workboxWebpackPlugin) { %>
import WorkboxWebpackPlugin from "workbox-webpack-plugin";<% } %>
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const isProduction = process.env.NODE_ENV === "production";
<% if (cssType !== "none") { %>
<% if (extractPlugin === "Yes") { %>
const stylesHandler = MiniCssExtractPlugin.loader;
<% } else if (extractPlugin === "Only for Production") { %>
const stylesHandler = isProduction ? MiniCssExtractPlugin.loader : "style-loader";
<% } else { %>
const stylesHandler = "style-loader";<% } %><% } %>
/** @type {import("webpack").Configuration} */
const config <% if (langType === "Typescript") { %>: Configuration<% } %> = {
entry: "<%= entryPoint %>",
output: {
path: path.resolve(__dirname, "dist"),
},<% if (devServer) { %>
devServer: {
open: true,
},<% } %>
plugins: [<% if (htmlWebpackPlugin) { %>
new HtmlWebpackPlugin({
template: "index.html",
}),
<% } %><% if (extractPlugin === "Yes") { %>
new MiniCssExtractPlugin(),
<% } %>
// Add your plugins here
// Learn more about plugins from https://webpack.js.org/configuration/plugins/
],
module: {
rules: [<% if (langType == "ES6") { %>
{
test: /\.(js|jsx)$/i,
loader: "babel-loader",
},<% } %><% if (langType == "Typescript") { %>
{
test: /\.(ts|tsx)$/i,
loader: "ts-loader",
exclude: ["/node_modules/"],
},<% } %><% if (isCSS && !isPostCSS) { %>
{
test: /\.css$/i,
use: [stylesHandler,"css-loader"],
},<% } %><% if (cssType == "SASS") { %>
{
test: /\.s[ac]ss$/i,
use: [stylesHandler, "css-loader", <% if (isPostCSS) { %>"postcss-loader", <% } %>"sass-loader"],
},<% } %><% if (cssType == "LESS") { %>
{
test: /\.less$/i,
use: [stylesHandler, "css-loader", <% if (isPostCSS) { %>"postcss-loader", <% } %>"less-loader"],
},<% } %><% if (cssType == "Stylus") { %>
{
test: /\.styl$/i,
use: [stylesHandler, "css-loader", <% if (isPostCSS) { %>"postcss-loader", <% } %>"stylus-loader"],
},<% } %><% if (isPostCSS && isCSS) { %>
{
test: /\.css$/i,
use: [stylesHandler, "css-loader", "postcss-loader"],
},<% } %>
{
test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif)$/i,
type: "asset",
},
%><% if (htmlWebpackPlugin) { %>
{
test: /\.html$/i,
use: ["html-loader"],
},<% } %>
// Add your rules for custom modules here
// Learn more about loaders from https://webpack.js.org/loaders/
],
},<% if (langType == "Typescript") {%>
resolve: {
extensions: [".tsx", ".ts", ".jsx", ".js", "..."],
},<% } %>
};
export default () => {
if (isProduction) {
config.mode = "production";
<% if (extractPlugin === "Only for Production") { %>config.plugins!.push(new MiniCssExtractPlugin());<% } %>
<% if (workboxWebpackPlugin) { %>config.plugins!.push(new WorkboxWebpackPlugin.GenerateSW());<% } %>
} else {
config.mode = "development";
}
return config;
};