generador de proyectos hace que webpack sea menos tedios en temas de configuracion, te genera practicamente todo, saludos
Introducción a Webpack
¿Qué es Webpack?
Conceptos básicos de Webpack
Proyecto inicial
Tu primer build con Webpack
Instalación de Webpack y construcción del proyecto
Configuración de webpack.config.js
Loaders y Plugins en Webpack
Babel Loader para JavaScript
HTML en Webpack
Loaders para CSS y preprocesadores de CSS
Copia de archivos con Webpack
Loaders de imágenes
Loaders de fuentes
Optimización: hashes, compresión y minificación de archivos
Webpack Alias
Deploy del proyecto
Variables de entorno
Webpack en modo desarrollo
Webpack en modo producción
Webpack Watch
Deploy a Netlify
Herramientas de desarrollo complementarias
Webpack Dev Server
Webpack Bundle Analyzer
Webpack DevTools
Integración básica de React.js
Instalación y configuración de React
Configuración de Webpack 5 para React.js
Configuración de plugins y loaders para React
Configuración de Webpack para CSS en React
Optimización de Webpack para React
Deploy del proyecto con React.js
Próximos pasos
Continúa con el Curso Práctico de Webpack
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Oscar Barajas Tavares
Aportes 21
Preguntas 13
generador de proyectos hace que webpack sea menos tedios en temas de configuracion, te genera practicamente todo, saludos
#NPM
npm install -D css-minimizer-webpack-plugin terser-webpack-plugin clean-webpack-plugin
# YARN
yarn add -D css-minimizer-webpack-plugin terser-webpack-plugin clean-webpack-plugin
Cabe resaltar que:
La dependencia de MiniCssExtractPlugin es para el modo de produccion, el cual reemplaza la de style-loader.
{
test: /\.s[ac]ss$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
}
Recuerden que en vez de usar el Plugin
new CleanWebpackPlugin()
Pueden utilizar el clean
nativo de Webpack. Aquí les dejo la documentación.
Con el clean
quedaría:
module.exports = {
...
output: {
clean: true,
}
}
Cabe recalcar que a partir de Webpack 5 terser-webpack-plugin ya viene incluido y basta con requerirlo en configuración.
Quede decepcionado del curso, no es malo. Pero no introdujo las dynamic link library (DLL) por ejemplo.
Me habia asustando al ver que empezaban con react , ya que el curso de react no esta antes de este curso en la carrera de javascript y no habia visto nada…pero esta super bien aplicado la dinamica del curso.
Por sias, si desean el plugin que usa Oscar para dar colores a sus Tabs en cada pestaña del proyecto, se llamada “indent-rainbow” en el Marketplace de VSCode.
.
Vamos a optimizarlo con algunas dependencias que ya usamos. Que nos ayudarán a trabajar css, optimizar JS y limpiar el recurso cuando generemos el build para producción.
.
Los instalamos:
npm install css-minimizer-webpack-plugin terser-webpack-plugin -D
Creamos el webpack.config para modo de desarrollo y hacemos las configuraciones que ya hemos hecho anteriormente.
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin')
const TerserWebpackPlugin = require('terser-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js',
publicPath: '/'
},
resolve: {
extensions: ['.js', '.jsx'],
alias: {
"@components": path.resolve(__dirname, 'src/components/'),
"@styles": path.resolve(__dirname, 'src/styles/')
}
},
mode: 'production',
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
},
{
test: /\.html$/,
use: {
loader: 'html-loader'
}
},
{
test: /\.s[ac]ss$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/public/index.html',
filename: 'index.html'
}),
new MiniCssExtractPlugin({
filename: '[name].css'
}),
new CleanWebpackPlugin()
],
optimization: {
minimize: true,
minimizer: [
new CssMinimizerWebpackPlugin(),
new TerserWebpackPlugin()
]
}
}
"start": "webpack serve --config webpack.config.dev.js",
"build": "webpack --config webpack.config.js"
Hay que instalar los paquetes para optimizar todo instalando:
npm install -D css-minimizer-webpack-plugin terser-webpack-plugin clean-webpack-plugin -D
Ahora hay que crear nuestro webpack para el modo desarrollo. “webpack.config.dev.js”
Pegamos todo y del original eliminamos el server para ahora si configurar todo lo que vamos a instalar:
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const {cleanWebpackPlugin} = require('terser-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
Despues los alias:
alias:{
'@components': path.resolve(__dirname,'src/components/' ),
'@styles': path.resolve(__dirname, 'src/styles')
}
Despues la parte de optimizado:
optimization:{
minimize:true,
minimizer:[
new CssMinimizerPlugin(),
new TerserPlugin()
]
}
Ahora solo queda configurar el package```
Esta última sección es oro
estuvo super genial el curso
Estamos llegando al final del curso Y por fin entendi.
Gracias por esta seccion de ejemplo practico de todo lo aprendido Porfesor
Una pequeña situación: Al final la idea es probar que todo funcione, tanto el npm run build como el start, en mi caso, cuando lanzaba el start me genera el siguiente error:
configuration.mode should be one of these:
“development” | “production” | “none”
Lo que hice fue ponerle la banderita de development al script, quedó de la siguiente forma:
"start": "webpack serve --mode development --config webpack.config.dev.js",
Y también a la del build:
"build": "webpack --mode production --config webpack.config.js"
Si eso les pasó, espero les sirva, saludos
#NuncaParesDeAprender
Optimización de Webpack para React
Instalamos css-minimezer-webpack-plugin para poder copilar el css a la hora de mandarlo a produccion.
#NPM
npm install -D css-minimizer-webpack-plugin
Terser minifica el codigo js, por defecto ya viene incluido en webpack v5 pero si quieres poner una config por defecto tendras que instalar los plugins.
terser-webpack-plugin
clean-webpack-plugin: Cuando nosotros vayamos exportando a producción assets, este módulo nos ayuda a limpiar nuestro folder donde están los bundles.2
clean-webpack-plugin
yarn add -D css-minimizer-webpack-plugin terser-webpack-plugin clean-webpack-plugin
const CssMinimizerPlugin = require(‘css-minimizer-webpack-plugin’);
const TerserPlugin = require(‘terser-webpack-plugin’);
const { CleanWebpackPlugin } = require(‘clean-webpack-plugin’)
plugins: [
new HtmlWebpackPlugin({
template: ‘./public/index.html’,
filename: ‘./index.html’
}),
new MiniCssExtractPlugin({
filename: ‘[name].css’
}),
new CleanWebpackPlugin(),
],
optimization: {
minimize: true, activamos esta opcion css-minimizer… para poder usarlo en modo desarrollo tmb
minimizer: [
new CssMinimizerPlugin(),
new TerserPlugin(),
]
}
Les dejo el repositorio del profe para que comparen con su proyecto en caso de tener un error:
https://github.com/platzi/curso-webpack-react/tree/react/04
mi error fue que no tenía instaladas las dependencias de reac y react-dom
no recuerdo que se hayan instalado.
Me di cuenta que al momento de ejecutar el comando ‘npm run build’ no me estaba generando un mitificado del CSS y cuando ejecuto el ‘npm run start’ en la pagina note, que en el HEAD no estaba en un LINK de CSS, ósea no estaba separado del HTML, que hasta donde tengo entendido es mala practica tener el CSS en el mismo HTML. así que la solución para separar el CSS del HTML fue esta.
test: /\.(css|scss)$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'sass-loader'
]
Eliminamos el ‘style-loader’ y lo reemplazamos por el ‘MiniCssExtractPlugin.loader’ y notaran que al momento de hacer el BUILD se crea el mitificado de CSS en la carpeta ‘dist’ y cuando ejecuten ‘start’ se fijan que en el HEAD ya se crea el LINK de CSS.
Se viene deploy para webpack con React B)
con ayuda de otros compañeros acá, webpack ya permite limpiar y optimizar sin tener que instalar ninguna dependencia.
para limpiar
module.exports = {
...
output: {
clean: true,
}
}
para optimizar
module.exports = {
...
optimization: {
minimize: true
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?