Si agregas este comentario antes del objeto de configuración de webpack tendrás autocompletado en vs code.
/** @type {import('webpack').Configuration} */
module.exports = {...}
¿Cómo configurar Webpack para un proyecto con Express?
La configuración de Webpack es esencial para la eficiencia de un proyecto, especialmente cuando trabajamos con Express. Aprende a configurar Webpack paso a paso para optimizar tu aplicación y facilitar su despliegue tanto en desarrollo como en producción. Este tutorial te guiará con claridad, asegurándote un proyecto bien estructurado y eficiente.
¿Qué es lo primero que debemos verificar?
Antes de comenzar con la configuración de Webpack, asegúrate de que tu proyecto esté funcional. Verifica que puedas iniciar el servidor local, como por ejemplo en localhost:3000, para comprobar que el entorno está preparado para trabajar.
¿Cómo crear un archivo de configuración para Webpack?
Una vez que todo está en orden, lo siguiente es crear el archivo de configuración para Webpack en la raíz del proyecto. Este archivo suele llamarse webpack.config.js. Aquí se definirá cómo se compilará y empaquetará cada parte de tu aplicación.
const path = require('path'); module.exports = { name: 'express-server', entry: './src/index.js', output: { path: path.resolve(__dirname, 'dist'), filename: 'index.js', }, resolve: { extensions: ['.js'], }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', }, }, ], }, target: 'node', };
¿Cómo se configuran las extensiones y el módulo de salida?
Configura las extensiones y el módulo para que Webpack sepa cómo procesar los archivos de JavaScript y dónde guardar los archivos compilados. Aquí definimos el entry para indicar el punto de entrada de la aplicación y output para especificar el directorio de salida, generalmente nombrado dist.
¿Qué loader debe utilizarse y por qué?
Para transpilar el código JavaScript y garantizar compatibilidad, debemos utilizar Babel. Configura babel-loader en las reglas del módulo. Excluye la carpeta node_modules para evitar que se procese innecesariamente.
¿Cómo añadir scripts al package.json para gestionar el proyecto?
Agrega scripts en package.json para automatizar tareas comunes, como iniciar el servidor o construir el proyecto para producción.
"scripts": { "start": "node dist/index.js", "dev": "webpack --mode development && node dist/index.js", "build": "webpack --mode production" }
dist.¿Qué hacer al enfrentar errores de compilación?
No te preocupes si ves errores; son una parte normal del proceso. Analiza detenidamente los mensajes de error, ya que indican pasos específicos para solucionar problemas.
Por ejemplo, si usas Webpack 5, asegúrate de configurar el target apropiadamente y verifica tus presets en Babel:
target: 'node',
Y en un archivo .babelrc:
{ "presets": ["@babel/preset-env"] }
¿Qué sigue después de configurar Webpack?
Después de verificar que el servidor está corriendo adecuadamente y el proyecto se compila sin errores, explora cómo integrar TypeScript en tu proyecto con Express para aprovechar las mejoras de tipado estático en JavaScript. Esta combinación potenciará aún más la robustez y mantenibilidad de tu aplicación.
La configuración de Webpack es esencial para la eficiencia de un proyecto, especialmente cuando trabajamos con Express. Aprende a configurar Webpack paso a paso para optimizar tu aplicación y facilitar su despliegue tanto en desarrollo como en producción. Este tutorial te guiará con claridad, asegurándote un proyecto bien estructurado y eficiente.
Antes de comenzar con la configuración de Webpack, asegúrate de que tu proyecto esté funcional. Verifica que puedas iniciar el servidor local, como por ejemplo en localhost:3000, para comprobar que el entorno está preparado para trabajar.
Una vez que todo está en orden, lo siguiente es crear el archivo de configuración para Webpack en la raíz del proyecto. Este archivo suele llamarse webpack.config.js. Aquí se definirá cómo se compilará y empaquetará cada parte de tu aplicación.
const path = require('path');
module.exports = {
name: 'express-server',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'index.js',
},
resolve: {
extensions: ['.js'],
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
],
},
target: 'node',
};
Configura las extensiones y el módulo para que Webpack sepa cómo procesar los archivos de JavaScript y dónde guardar los archivos compilados. Aquí definimos el entry para indicar el punto de entrada de la aplicación y output para especificar el directorio de salida, generalmente nombrado dist.
Para transpilar el código JavaScript y garantizar compatibilidad, debemos utilizar Babel. Configura babel-loader en las reglas del módulo. Excluye la carpeta node_modules para evitar que se procese innecesariamente.
Agrega scripts en package.json para automatizar tareas comunes, como iniciar el servidor o construir el proyecto para producción.
"scripts": {
"start": "node dist/index.js",
"dev": "webpack --mode development && node dist/index.js",
"build": "webpack --mode production"
}
dist.No te preocupes si ves errores; son una parte normal del proceso. Analiza detenidamente los mensajes de error, ya que indican pasos específicos para solucionar problemas.
Por ejemplo, si usas Webpack 5, asegúrate de configurar el target apropiadamente y verifica tus presets en Babel:
target: 'node',
Y en un archivo .babelrc:
{
"presets": ["@babel/preset-env"]
}
Después de verificar que el servidor está corriendo adecuadamente y el proyecto se compila sin errores, explora cómo integrar TypeScript en tu proyecto con Express para aprovechar las mejoras de tipado estático en JavaScript. Esta combinación potenciará aún más la robustez y mantenibilidad de tu aplicación.
Si agregas este comentario antes del objeto de configuración de webpack tendrás autocompletado en vs code.
/** @type {import('webpack').Configuration} */
module.exports = {...}
const path = require('path');
// path: la ubicacion del proyecto
module.exports = {
//module.export: la info de nuestra configuracion webpack
name: 'express-server',
//name: nombre del proyecto
entry: './src/index.js',
// entry: punto de entrada de nuestra aplicacion
target: 'node',
output: {
//output: donde guardamos el recurso que fue modularizado por webpack
path: path.resolve(__dirname, 'dist'),
//path: ubicacion del guardado
//__dirname: donde esta el proyecto en el Sistema Operativo
// 'dist'(distribution): nombre del folder, si no existe entonces creara dist
filename: 'index.js',
//filename: como llamar a la aplicacion cuando se prepare para produccion
},
resolve: {
// extensions: con que extensiones trabajaremos
extensions: ['.js']
},
module: {
rules: [
//rules: reglas con las que trabajaremos en el proyecto
// se asigna a cada loader(optimizador), con que tipo de archivo trabajara y con que reglas
{
test: /\.(js)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}
]
}
}
Scripts del package.json:
"start": "node dist/index.js",
"build": "webpack --mode production"
En "dev" hay dos formas que funcionan igual:
"dev": "webpack --mode development && npm run start",
// ó
"dev": "webpack --mode development && node dist/index.js",
BABEL creamos en la raiz el archivo .babelrc:
{
"presets": [
"@babel/preset-env"
]
}
y corremos npm run dev.
Si les sale un error de Tipo
WARNING in ./node_modules/express/lib/view.js
Pueden dirijirse a este LINK y allí encontraran una respuesta
Los que tengan problemas con el archivo .babelrc.js con algo de la syntaxis, solo quitenle el .js y dejenlo con .babelrc
Webpack
Cómo es posible que siempre, incluso siguiendo al pie de la letra el puñetero Webpack me falle a la hora de ejecutar los scripts y con Parcel nunca?
Es increible lo desesperante que puede llegar a ser, no falla nunca, es ejecutar los scripts y da errores.
(
¿En que casos se utilizan los multiples puntos de entrada en webpack?
No me ha quedado del todo claro esta característica y agradecería mucho un ejemplo
Hola, para los que le salga este error:
WARNING in ./node_modules/express/lib/view.js
81:13-25 Critical dependency: the request of a dependency is an expression
@ ./node_modules/express/lib/view.js
@ ./node_modules/express/lib/application.js
@ ./node_modules/express/lib/express.js
@ ./node_modules/express/index.js
@ ./express/server.js
Deben instalar esta dependencia:
npm install webpack-node-externals
Y luego en el ** webpack.config.js** deben poner lo siguiente:
const nodeExternals = require('webpack-node-externals');
{
target: 'node',
externals: [nodeExternals()],
}
Y listo se solucionará el problema :)
La verdad muy desactualizado este curso ya que Webpack 5 ya no incluye automáticamente polyfills para los módulos centrales de Node.js como stream y path.
Joel Campos
Paolo Joaquin Pinto Perez
Heinner Gonzalo Vega Garcia
Jorge Del Pezo
Alejandro Jesus del Campillo Jaime
Sergio Jurado Casado
Juan David Sánchez
Sergio Jurado Casado
Rafa Anaya
Oscar Barajas Tavares
Team PlatziMauricio Contreras
Edison Castañeda
Si agregas este comentario antes del objeto de configuración de webpack tendrás autocompletado en vs code.
/** @type {import('webpack').Configuration} */ module.exports = {...}
++Configuración de Webpack para Express.js++
const path = require('path'); // path: la ubicacion del proyecto module.exports = { //module.export: la info de nuestra configuracion webpack name: 'express-server', //name: nombre del proyecto entry: './src/index.js', // entry: punto de entrada de nuestra aplicacion target: 'node', output: { //output: donde guardamos el recurso que fue modularizado por webpack path: path.resolve(__dirname, 'dist'), //path: ubicacion del guardado //__dirname: donde esta el proyecto en el Sistema Operativo // 'dist'(distribution): nombre del folder, si no existe entonces creara dist filename: 'index.js', //filename: como llamar a la aplicacion cuando se prepare para produccion }, resolve: { // extensions: con que extensiones trabajaremos extensions: ['.js'] }, module: { rules: [ //rules: reglas con las que trabajaremos en el proyecto // se asigna a cada loader(optimizador), con que tipo de archivo trabajara y con que reglas { test: /\.(js)$/, exclude: /node_modules/, use: { loader: 'babel-loader' } } ] } }
Scripts del package.json:
"start": "node dist/index.js", "build": "webpack --mode production"
En "dev" hay dos formas que funcionan igual:
"dev": "webpack --mode development && npm run start", // ó "dev": "webpack --mode development && node dist/index.js",
BABEL creamos en la raiz el archivo .babelrc:
{ "presets": [ "@babel/preset-env" ] }
y corremos npm run dev.
Si les sale un error de Tipo
WARNING in ./node_modules/express/lib/view.js
Pueden dirijirse a este LINK y allí encontraran una respuesta
Los que tengan problemas con el archivo .babelrc.js con algo de la syntaxis, solo quitenle el .js y dejenlo con .babelrc
Webpack
Cómo es posible que siempre, incluso siguiendo al pie de la letra el puñetero Webpack me falle a la hora de ejecutar los scripts y con Parcel nunca?
Es increible lo desesperante que puede llegar a ser, no falla nunca, es ejecutar los scripts y da errores. (
¿Cómo tienes tu configuración del package.json? ¿Por casualidad tienes está linea en él: "type": "module"?
Ese error me ocurrió alguna vez hace mucho tiempo y lo solucioné cambiando esa entrada por "type": "commonjs" (o eliminándola). El motivo es que le dices a Node que la forma de importar paquetes no es con CommonJS (que es el estándar de Node, el que usa require) sino que es con ESModules.
Pero entonces me sale lo del Cannot use import ?? O no se puede usar los imports sin esa configuration?
Creo que si se puede porque al estar instalado babel supongo que ya lo coge todo correctamente y te lo permite no? Además tengo entendido que con ts no hace falta y de hecho creo que no se usan los require sino los import
¿En que casos se utilizan los multiples puntos de entrada en webpack?
No me ha quedado del todo claro esta característica y agradecería mucho un ejemplo
Cuando necesitas separar la lógica de diferentes secciones de tu proyecto, Puedes dividir tu proyecto y con ello ser más ágil o aplicar distintas reglas o configuraciones.
Hola, para los que le salga este error:
WARNING in ./node_modules/express/lib/view.js 81:13-25 Critical dependency: the request of a dependency is an expression @ ./node_modules/express/lib/view.js @ ./node_modules/express/lib/application.js @ ./node_modules/express/lib/express.js @ ./node_modules/express/index.js @ ./express/server.js
Deben instalar esta dependencia:
npm install webpack-node-externals
Y luego en el ** webpack.config.js** deben poner lo siguiente:
const nodeExternals = require('webpack-node-externals'); { target: 'node', externals: [nodeExternals()], }
Y listo se solucionará el problema :)
La verdad muy desactualizado este curso ya que Webpack 5 ya no incluye automáticamente polyfills para los módulos centrales de Node.js como stream y path.