-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy path02-webpack-end.txt
More file actions
86 lines (80 loc) · 2.16 KB
/
02-webpack-end.txt
File metadata and controls
86 lines (80 loc) · 2.16 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
const currentTask = process.env.npm_lifecycle_event
const path = require("path")
const Dotenv = require("dotenv-webpack")
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackHarddiskPlugin = require("html-webpack-harddisk-plugin")
const HtmlWebpackPlugin = require("html-webpack-plugin")
const fse = require("fs-extra")
/*
Because I didn't bother making CSS part of our
webpack workflow for this project I'm just
manually copying our CSS file to the DIST folder.
*/
class RunAfterCompile {
apply(compiler) {
compiler.hooks.done.tap("Copy files", function () {
fse.copySync("./app/main.css", "./dist/main.css")
/*
If you needed to copy another file or folder
such as your "images" folder, you could just
call fse.copySync() as many times as you need
to here to cover all of your files/folders.
*/
})
}
}
config = {
entry: "./app/Main.js",
output: {
publicPath: "/",
path: path.resolve(__dirname, "app"),
filename: "bundled.js",
},
plugins: [
new Dotenv(),
new HtmlWebpackPlugin({
filename: "index.html",
template: "app/index-template.html",
alwaysWriteToDisk: true,
}),
new HtmlWebpackHarddiskPlugin(),
],
mode: "development",
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules)/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-react", ["@babel/preset-env", { targets: { node: "12" } }]],
},
},
},
],
},
}
if (currentTask == "webpackDev" || currentTask == "dev") {
config.devtool = "source-map"
config.devServer = {
port: 3000,
static: {
directory: path.join(__dirname, "app")
},
hot: true,
liveReload: false,
historyApiFallback: { index: "index.html" },
}
}
if (currentTask == "webpackBuild") {
config.plugins.push(new CleanWebpackPlugin(), new RunAfterCompile())
config.mode = "production"
config.output = {
publicPath: "/",
path: path.resolve(__dirname, "dist"),
filename: "[name].[chunkhash].js",
chunkFilename: "[name].[chunkhash].js",
}
}
module.exports = config