-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.config.js
139 lines (128 loc) · 4.51 KB
/
webpack.config.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
const path = require("path");
// plugin para separar los css en archivos diferentes
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
//plugin para limpiar archivos cache
const { CleanWebpackPlugin } = require("clean-webpack-plugin");
//plugin para cargar mi template html y así poder generar el html con los hash automáticamente
const HtmlWebpackPlugin = require("html-webpack-plugin");
// plugin necesario para minificar el CSS, ya que con el mode : production solo se minficaria el html
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
// TerserJSplugin ya viene instalado en webpack por defecto, pero al tocar lo opción de optimization
// debe especificarse explícitamente que este plugin será usado para minificar el JS
const TerserJSPlugin = require("terser-webpack-plugin");
module.exports = {
mode: "production",
devtool: "cheap-module-eval-source-map",
watch: true,
//especificando dos archivos como entry para el config de webpack
entry: {
application: "./src/index.js",
admin: "./src/admin.js",
},
output: {
//esto crea el archivo en la carpeta dist por la webpack zero conf
// filename: "main.js",
//because the default output folder is dist, I tell webpack to go gone folder up
//esta forma es valida
//filename: "../build/application.js",
//pero para separar el folder del name puedo hacer uso de path
// como el path debe ser absolute hago uso del modulo de node llamado path
// para no hardcodear la ruta
// filename: "application.js",
// para utilizar los nombre especificados como entry, de manera tal que sean
// tomados como output debo utilizar el placeholder [name]
filename: "[name]-[contenthash].js",
path: path.resolve(__dirname, "build"),
},
optimization: {
minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
},
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
},
},
{
// style para aplicarlo al htmll y el css- loader para cargar el css
// style inyecta el css en le html
// primero se aplica de derecha a izquierda
test: /\.css$/i,
use: [
// "style-loader",
// coloco el plugin para injectarlos en archivos separados
MiniCssExtractPlugin.loader,
{ loader: "css-loader", options: { importLoaders: 1 } },
{
loader: "postcss-loader",
options: {
plugins: [
require("autoprefixer")({
overrideBrowserslist: ["last 3 versions", "ie >9"],
}),
],
},
},
"sass-loader",
],
},
{
//loader for handling scss. sass-loader is called first which in turn calls node-sass
test: /\.scss$/i,
use: [
// style loader injecta los estilos en el html
//"style-loader",
// coloco el plugin para injectarlos en archivos separados
MiniCssExtractPlugin.loader,
{ loader: "css-loader", options: { importLoaders: 1 } },
{
loader: "postcss-loader",
options: {
plugins: [
require("autoprefixer")({
overrideBrowserslist: ["last 3 versions", "ie >9"],
}),
],
},
},
"sass-loader",
],
},
// configuracion para manejar imagenes
{
// agregado manejo de fuentes file extensions like woff2, eot, ttf etc,
// that it's possible to load with the file-loader,
// but you can basically add any other type of file, loaders are here for that purpose
test: /(png|jpg|gif|svg|woff2?|eot|ttf|otf|wav)(\?.*)?$/i,
use: [
{
loader: "url-loader",
options: {
limit: 8192,
name: "[name].[hash:7].[ext]",
},
},
//loader para comprimir las imágenes
{ loader: "image-webpack-loader" },
],
},
],
},
plugins: [
// plugin para cargar el template html que creé
new HtmlWebpackPlugin({
template: "./src/template.html",
}),
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
// placeholder para que se generen tambien varios css
filename: "[name]-[contenthash].css",
}),
],
};