You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+137-1Lines changed: 137 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -28,6 +28,7 @@ Una vez dispongas de todo ello, por favor, asegúrate de tener nociones claras s
28
28
npm install --save-dev webpack webpack-cli
29
29
```
30
30
Nuestro proyecto ya está casi listo para la [**VERSIÓN 1.0**](../../releases/tag/v1.0)!
31
+
31
32
1. Crea ahora una carpeta src, puedes usar la instrucción
32
33
```bash
33
34
mkdir ./src
@@ -88,7 +89,7 @@ Al crear un proyecto obtienes una dirección para clonar.
88
89
89
90
* La instrucción `git clone` te permite clonar en un directorio local (en nuestro caso `webpack-essential`) un repositorio _git_ que hayas hospedado en un sistema remoto (como _github_, _gitlab_, _bitbucket_ o _sourceforge_). [Aquí tienes un artículo](https://www.atlassian.com/git/tutorials/setting-up-a-repository/git-clone) en el que se te explica cómo y para qué usar esta instrucción.
90
91
91
-
* El siguiente paso que has seguido es la creación de un archivo `package.json`, mediante la instrucción `npm init --yess`, que permitirà que trabajes con un proyecto _node_ en tu directorio `webpack-essential`.
92
+
* El siguiente paso que has seguido es la creación de un archivo `package.json`, mediante la instrucción `npm init --yes`, que permitirà que trabajes con un proyecto _node_ en tu directorio `webpack-essential`.
92
93
Si quieres entender un poco mejor la herramienta _npm_[pásate por esta página](https://docs.npmjs.com/about-npm/).
93
94
También puedes leer sobre el archivo `package.json`[en esta página](https://nodejs.org/en/knowledge/getting-started/npm/what-is-the-file-package-json/) y puedes leer sobre la instrucción `npm init`[en esta otra](https://docs.npmjs.com/creating-a-package-json-file)
94
95
@@ -109,3 +110,138 @@ Si el término "parseado" (_parsing_ en inglés) te suena a extraterrestre, debe
109
110
* Finalmente has ejecutado una instrucción de la herramienta _npx_ que lanza el proceso de empaquetaje (_bundling_) de _webpack_ (usando para ello la herramienta que hemos instalado con el paqueta `webpack-cli`).
110
111
Este proceso crea el archivo `dist/main.js` a partir del contenido del archivo `index.js` y de sus dependencias, aunque en nuestro caso no tenga.
111
112
Si quieres conocer la herramienta _npx_ es aconsejable que visites [esta página](https://nodejs.dev/the-npx-nodejs-package-runner).
113
+
114
+
----
115
+
116
+
## CAPÍTULO 2: Proyecto con webpack.config.js
117
+
118
+
### CAPÍTULO 2: Antes de empezar
119
+
Si aún no has seguido los pasos del capítulo 1, sería importante que lo hicieras.
120
+
También sería importante que leyeras el punto llamado ["Antes de empezar"](#capítulo-1-antes-de-empezar) de dicho capítulo.
121
+
Finalmente resultará imprescindible que te hagas a la idea de qué es la configuración de _webpack_, que en resumen es el archivo que rige el proceso de empaquetado (_bundling_ en ingés) que ocurre cada vez que ejecutamos `npx webpack`. Para ello te recomendamos que primero visites [la sección "CONCEPTS"](https://webpack.js.org/concepts/) que encontrarás en la web de _webpack_ para luego continuar con el apartado ["Using a configuration" de la guía "GETTING STARTED"](https://webpack.js.org/guides/getting-started/#using-a-configuration) que encontrarás en la misma web.
122
+
123
+
124
+
### CAPÍTULO 2: Pasos previos
125
+
Si has seguido los pasos del capítulo 1, tendrás tu proyecto listo para iniciar los pasos del presente capítulo. Pero antes, deberás atender a una cuestión importante: **estás usando un proyecto _git_, que está conectado a un repositorio**. Esto te permitirá hacer una entrega de tu trabajo para poderlo conservar y recuperarlo en este estado actual si lo necesitaras en un futuro.
126
+
Por lo tanto, empecemos con dos pasos previos para asegurar que tu trabajo no corre peligro:
127
+
128
+
1. Crea un archivo llamado `.gitignore` en tu carpeta `webpack-essential` y añádele el siguiente contenido:
129
+
```
130
+
.gitignore
131
+
node_modules
132
+
```
133
+
Con estas simples líneas te asegurarás de que cualquier operación con _git_ que vayas a realizar, descarte someter al control de versiones de _git_ el propio fichero `.gitignore` y del mismo modo lo haga con la carpeta `node_modules` (que podrás controlar y gestionar con la herramienta _npm_)
134
+
135
+
1. Ejecuta las siguientes acciones con la herramienta _git_:
136
+
1. Primero de todo añade todos los archivos de tu proyecto a la entrega que realizarás, con la instrucción:
137
+
```
138
+
git add -A
139
+
```
140
+
1. Acto seguido realiza una entrega de los archivos que dispones, con la instrucción:
141
+
```
142
+
git commit -m "Entrega del capítulo 1"
143
+
```
144
+
145
+
Si lo deseas, y sabes cómo puedes llevarlo a cabo, te aconsejamos también que publiques esta entrega en el repositorio/s _git_ remoto con el/los que esté conectado tu proyecto.
146
+
147
+
### CAPÍTULO 2: Cómo crear webpack.config.js
148
+
1. Crea un archivo llamado `webpack.config.js` en la carpeta `webpack-essential`. Puedes usar la instrucción
149
+
```bash
150
+
touch ./webpack.config.js
151
+
```
152
+
1. Añádele el siguiente código:
153
+
```javascript
154
+
module.exports= {}
155
+
```
156
+
Dentro de este objeto javascript, especificaremos valores de configuración de _webpack_, los **nuestros**.
157
+
158
+
1. Comprueba que webpack sigue funcionando aunque nuestra configuración sea aparentemente vacía. Elimina los archivos que haya en la carpeta `dist`. Para ello puedes usar estra instrucción:
159
+
```bash
160
+
rm -f dist/*
161
+
```
162
+
1. Ahora repite el paso 9 del [primer capítulo](#capítulo-1-cómo-crear-el-proyecto), en que ejecutábamos:
163
+
```bash
164
+
npx webpack
165
+
```
166
+
Si inspeccionas el contenido de la carpeta `dist`, deberá aparecer de nuevo el archivo `main.js`.
167
+
Como has podido comprobar, de alguna manera, _webpack_ asume valores de configuración por defecto, que le permiten crear estos archivos, aunque no le hayamos proporcionado configuración alguna, o aunque esté vacía.
168
+
169
+
1. Ejecuta ahora la siguiente instrucción para instalar un _plugin_ que nos ayudará a conocer esta configuración:
170
+
```bash
171
+
npm install --save-dev webpack-config-dump-plugin
172
+
```
173
+
1. Actualiza ahora el archivo `webpack.config.js` tal que su contenido sea el siguiente:
1. Abre ahora el archivo llamado `webpack.config.dump` que se ha generado en la carpeta `webpack-essential`. Como verás contiene un contenido que empieza con:
A partir del segundo paréntesis de apertura (`(`), vemos un objeto javascript, que finaliza en la última línea, justo antes del último paréntesis de cierre (`)`). **Este objeto contiene la configuración que usa _webpack_ por defecto**.
193
+
1. Sustituye el archivo `webpack.config.js` por el archivo `webpack.config.dump`. Para ello puedes usar la instrucción:
194
+
```
195
+
mv webpack.config.dumpwebpack.config.js
196
+
```
197
+
Nuestro proyecto ya está casi listo para la [**VERSIÓN 2.0**](../../releases/tag/v2.0)!
198
+
199
+
1. Ahora realiza las siguientes modificaciones en el archivo `webpack.config.js`:
200
+
1. Borra el texto que hay entre los claudators de la segunda línea, tal que tu fichero `webpack.config.js` empiece con:
201
+
```javascript
202
+
module.exports= () => ({ plugins:
203
+
[],
204
+
context:
205
+
```
206
+
1. Elimina por completo la propiedad `defaultRules` que hay dentro de la propiedad `module`, en caso de que exista. **El objeto que hay en la propiedad `module` no deberá tener ninguna propiedad `defaultRules`**
207
+
1. Modifica la propiedad `minimizer` que hay dentro de la propiedad `optimization`, tal que quede como sigue: `minimizer: [ ],`.
208
+
209
+
1. Finalmente podemos volver a usar _webpack_ nuevamente, tal que utilize nuestro fichero de configuración.
210
+
Para ello usaremos la ya conocida instrucción:
211
+
```
212
+
npx webpack
213
+
```
214
+
215
+
**HEMOS TERMINADO!**
216
+
Si echas un vistazo a tu carpeta `webpack-essential` encontrarás el siguiente contenido:
217
+
```
218
+
dist/
219
+
main.js
220
+
index.html
221
+
node_modules/
222
+
package.json
223
+
package-lock.json
224
+
src/
225
+
index.js
226
+
webpack.config.js
227
+
```
228
+
Eso significa que el archivo `webpack.config.js` está correctamente escrito!
229
+
**En el siguiente capítulo aprendremos a modificar algunas de las opciones que en él aparecen**.
230
+
231
+
### CAPÍTULO 2: Resumen
232
+
* Lo primero que has hecho es crear un archivo de configuración para _webpack_, llamado `webpack.config.js`. Como se explica en el apartado ["Using a configuration" de la guía "GETTING STARTED"](https://webpack.js.org/guides/getting-started/#using-a-configuration) que hay en la web de _webpack_, este archivo te permitirá definir opciones de configuración de _webpack_.
233
+
234
+
* A continuación has creado el contenido básico para este archivo, utilizando `module.exports`, que es manera tradicional (que utiliza sintaxis de _CommonJS_) de exponer el contenido de un módulo _javascript_, como es en este caso el archivo `webpack.config.js`.
235
+
Si desconoces el concepto de **módulo** aplicado a _javascript_, es altamente recomendable que leas el contenido de [esta página](https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/M%C3%B3dulos). En ella encontrarás también recursos que te permitirán asimilar una noción sobre qué es el proyecto _CommonJS_.
236
+
Y en caso de que desconozcas su uso en un entorno de un proyecto creado mediante _npm_, o en otras palabras, un proyecto creado mediante herramientas de NodeJS, entonces es oportuno que eches un vistazo a [esta página](https://nodejs.org/en/knowledge/getting-started/what-is-require/), y otro vistazo a [esta otra](https://nodejs.dev/expose-functionality-from-a-nodejs-file-using-exports), para entender porqué y para qué se _expone_ el contenido de un módulo _javascript_.
237
+
238
+
* Al alcanzar el punto 5, has instalado un paquete de node llamado `webpack-config-dump-plugin`, sobre el que podrás obtener información en [esta página](https://www.npmjs.com/package/webpack-config-dump-plugin). Y posteriormente, en el punto 6, lo has importado mediante el uso de la función `require` (propia de _CommonJS_) para utilizarlo como **plugin** en la configuración de _webpack_.
239
+
Si no estás familiarizado/a con el concepto "_plugin_" entonces deberías pasarte por el [apartado correspondiente de la sección "CONCEPTS"](https://webpack.js.org/concepts/plugins/) que encontrarás en la web de _webpack_.
240
+
241
+
* Llegados al punto 8, al ejecutar `npx webpack`, _webpack_ ha hecho uso de este _plugin_ durante su proceso de _empaquetado_, generando un archivo llamado `webpack.config.dump` cuyo contenido es un "volcado" de la configuración que ha utilizado _webpack_ para dicho proceso.
242
+
243
+
* Luego a partir de esta configuración "volcada" en un fichero, has generado contenido para el archivo de configuración `webpack.config.js`.
244
+
Y como habrás visto la configuración de webpack es muy rica en opciones. De hecho puedes hacerte a la idea de todo lo que podrás configurar si pasas por el apartado ["Options" que hay en la sección "CONFIGURATION"](https://webpack.js.org/configuration/#options) de la web de _webpack_.
245
+
246
+
* Finalmente, en el punto 10 has realizado algunos ajustes en las opciones de configuración, en tanto que **no existe una correspondencia absoluta** entre el modo en que se expresan las opciones configuración en el archivo `webpack.config.js` y la configuración que hemos obtenido mediante el "volcado".
247
+
Seguramente te habrá llamado la atención el cambio de tipo de dato que ha ocurrido en `module.exports`, pasando de un objeto, tal y como aparecía en el punto 6, a una función. Puedes comprobar si visitas el apartado ["Configuration Types" que hay en la sección "CONFIGURATION"](https://webpack.js.org/configuration/configuration-types/) de la web de _webpack_, que en efecto es posible usar tanto un objeto que contenga opciones de configuración válidas, como también una función que retorne un objeto de ese tipo.
0 commit comments