-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.common.js
149 lines (146 loc) · 3.67 KB
/
webpack.common.js
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
const path = require("path");
const webpack = require("webpack");
const HtmlWebPackPlugin = require("html-webpack-plugin");
const nodeExternals = require("webpack-node-externals");
const RemovePlugin = require("remove-files-webpack-plugin");
let clientConfig = {
name: "client",
output: {
path: path.join(__dirname, "dist"),
filename: "[name].js",
},
target: "web",
node: {
fs: "empty",
// Need this when working with express, otherwise the build fails
__dirname: false, // if you don't put this is, __dirname
__filename: false, // and __filename return blank or /
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
loader: "babel-loader",
},
{
// Loads the javacript into html template provided.
// Entry point is set below in HtmlWebPackPlugin in Plugins
test: /\.html$/,
use: [
{
loader: "html-loader",
//options: { minimize: true }
},
],
},
{
test: /\.css$/,
use: ["style-loader", "css-loader"],
},
{
test: /\.less$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader", // translates CSS into CommonJS
},
{
loader: "less-loader", // compiles Less to CSS
options: {
lessOptions: {
// If you are using less-loader@5 please spread the lessOptions to options directly
modifyVars: {},
javascriptEnabled: true,
},
},
},
],
},
{
test: /\.(scss)$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
{
loader: "postcss-loader",
options: {
plugins: function () {
return [require("autoprefixer")];
},
},
},
{
loader: "sass-loader",
},
],
},
{
test: /\.(png|svg|jpg|gif|tif)$/,
use: [
{ loader: "file-loader", options: { name: "/static/[name].[ext]" } },
],
},
],
},
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
}),
new HtmlWebPackPlugin({
template: "./src/html/index.ejs",
filename: "./index.html",
favicon: "./src/img/favicon.png",
title: "trainAOA",
excludeChunks: ["server"],
}),
],
};
let serverConfig = {
output: {
path: path.join(__dirname, "dist"),
filename: "[name].js",
},
target: "node",
node: {
fs: "empty",
// Need this when working with express, otherwise the build fails
__dirname: false, // if you don't put this is, __dirname
__filename: false, // and __filename return blank or /
},
externals: [nodeExternals()], // Need this to avoid error when working with Express
module: {
rules: [
{
// Transpiles ES6-8 into ES5
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
},
},
],
},
plugins: [
new RemovePlugin({
before: {
// expects what your output folder is `dist`.
test: [
{
folder: "./dist",
method: () => true,
},
],
exclude: ["./dist/static/layers"],
},
}),
],
};
module.exports = { clientConfig, serverConfig };