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: src/content/7/es/part7d.md
+72-72Lines changed: 72 additions & 72 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,7 +120,23 @@ const config = () => {
120
120
121
121
module.exports= config
122
122
```
123
+
**Nota:** es posible definirlo directamente como un objeto en lugar de una función:
123
124
125
+
```js
126
+
constpath=require('path')
127
+
128
+
constconfig= {
129
+
entry:'./src/index.js',
130
+
output: {
131
+
path:path.resolve(__dirname, 'build'),
132
+
filename:'main.js'
133
+
}
134
+
}
135
+
136
+
module.exports= config
137
+
```
138
+
139
+
Un objeto puede ser suficiente para la mayoría de los casos, pero en algunos casos, necesitaremos ciertas características que requieren que la definición se realice como una función.
124
140
125
141
Luego definiremos un nuevo script npm llamado <i>build</i> que ejecutará el empaquetado con webpack:
126
142
@@ -141,14 +157,15 @@ const hello = name => {
141
157
}
142
158
```
143
159
144
-
145
160
Cuando ejecutamos el comando _npm run build_ , el código de nuestra aplicación será empaquetado por webpack. La operación producirá un nuevo archivo <i>main.js</i> que se agregará al directorio de <i>compilación</i>:
146
161
147
162

148
163
149
164
El archivo contiene muchas cosas que parecen bastante interesantes. También podemos ver el código que escribimos anteriormente al final del archivo:
150
165
151
-

166
+
```js
167
+
eval("const hello = name => {\n console.log(`hello ${name}`)\n}\n\n//# sourceURL=webpack://webpack-osa7/./src/index.js?");
168
+
```
152
169
153
170
Agreguemos un archivo <i>App.js</i> en el directorio <i>src</i> con el siguiente contenido:
154
171
@@ -178,46 +195,22 @@ Cuando empaquetamos la aplicación nuevamente con el comando _npm run build_, no
178
195
179
196
El código de nuestra aplicación se puede encontrar al final del archivo del paquete en un formato bastante oscuro:
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App */ \"./src/App.js\");\n\n\nconst hello = name => {\n console.log(`hello ${name}`)\n};\n\nObject(_App__WEBPACK_IMPORTED_MODULE_0__[\"default\"])()\n\n//# sourceURL=webpack:///./src/index.js?");
203
-
204
-
/***/ })
205
-
```
206
-
198
+

207
199
208
200
### Archivo de configuración
209
201
210
-
211
202
Echemos un vistazo más de cerca al contenido de nuestro archivo <i>webpack.config.js</i> actual:
212
203
213
204
```js
214
205
constpath=require('path')
215
206
216
-
constconfig= {
217
-
entry:'./src/index.js',
218
-
output: {
219
-
path:path.resolve(__dirname, 'build'),
220
-
filename:'main.js'
207
+
constconfig= () => {
208
+
return {
209
+
entry:'./src/index.js',
210
+
output: {
211
+
path:path.resolve(__dirname, 'build'),
212
+
filename:'main.js'
213
+
}
221
214
}
222
215
}
223
216
@@ -226,7 +219,6 @@ module.exports = config
226
219
227
220
El archivo de configuración se ha escrito en JavaScript y el objeto de configuración se exporta utilizando la sintaxis del módulo de Node.
228
221
229
-
230
222
Nuestra definición de configuración mínima casi se explica sola. La propiedad [entry](https://webpack.js.org/concepts/#entry) del objeto de configuración especifica el archivo que servirá como punto de entrada para empaquetar la aplicación.
231
223
232
224
@@ -245,20 +237,24 @@ Y convirtamos nuestra aplicación en una aplicación React agregando las definic
También realizaremos los siguientes cambios en el archivo <i>App.js</i>:
255
247
256
248
```js
257
-
importReactfrom'react'
249
+
importReactfrom'react'// necesitamos esto también ahora en los archivos los componentes
258
250
259
-
constApp= () => (
260
-
<div>hello webpack</div>
261
-
)
251
+
constApp= () => {
252
+
return (
253
+
<div>
254
+
hello webpack
255
+
</div>
256
+
)
257
+
}
262
258
263
259
exportdefaultApp
264
260
```
@@ -290,40 +286,47 @@ El mensaje de error del paquete web indica que es posible que necesitemos un <i>
290
286
291
287
```js
292
288
constApp= () => {
293
-
return<div>hello webpack</div>
289
+
return (
290
+
<div>
291
+
hello webpack
292
+
</div>
293
+
)
294
294
}
295
295
```
296
296
297
-
298
297
La sintaxis utilizada anteriormente proviene de JSX y nos proporciona una forma alternativa de definir un elemento React para una etiqueta <i>div</i>.
299
298
300
-
301
-
Podemos usar [caargadores](https://webpack.js.org/concepts/loaders/) para informar a webpack de los archivos que deben procesarse antes de que se empaqueten.
302
-
299
+
Podemos usar [cargadores](https://webpack.js.org/concepts/loaders/) para informar a webpack de los archivos que deben procesarse antes de que se empaqueten.
303
300
304
301
Configuremos un cargador para nuestra aplicación que transforme el código JSX en JavaScript normal:
305
302
306
303
```js
307
-
constconfig= {
308
-
entry:'./src/index.js',
309
-
output: {
310
-
path:path.resolve(__dirname, 'build'),
311
-
filename:'main.js',
312
-
},
313
-
// highlight-start
314
-
module: {
315
-
rules: [
316
-
{
317
-
test:/\.js$/,
318
-
loader:'babel-loader',
319
-
options: {
320
-
presets: ['@babel/preset-react'],
304
+
constpath=require('path')
305
+
306
+
constconfig= () => {
307
+
return {
308
+
entry:'./src/index.js',
309
+
output: {
310
+
path:path.resolve(__dirname, 'build'),
311
+
filename:'main.js'
312
+
},
313
+
// highlight-start
314
+
module: {
315
+
rules: [
316
+
{
317
+
test:/\.js$/,
318
+
loader:'babel-loader',
319
+
options: {
320
+
presets: ['@babel/preset-react'],
321
+
},
321
322
},
322
-
},
323
-
],
324
-
},
325
-
// highlight-end
323
+
],
324
+
},
325
+
// highlight-end
326
+
}
326
327
}
328
+
329
+
module.exports= config
327
330
```
328
331
329
332
@@ -369,22 +372,19 @@ Puede probar la aplicación incluida abriendo el archivo <i>build/index.html</i>
369
372

370
373
371
374
372
-
Vale la pena señalar que si el código fuente de la aplicación incluida usa <i>async/await</i>, el navegador no renderizará nada en algunos navegadores. [Buscar en Google el mensaje de error en la consola](https://stackoverflow.com/questions/33527653/babel-6-regeneratorruntime-is-not-defined) arrojará algo de luz sobre el problema. Tenemos que instalar una dependencia más que falta, que es [@babel/polyfill](https://babeljs.io/docs/en/babel-polyfill):
375
+
Vale la pena señalar que si el código fuente de la aplicación incluida usa <i>async/await</i>, el navegador no renderizará nada en algunos navegadores. [Buscar en Google el mensaje de error en la consola](https://stackoverflow.com/questions/33527653/babel-6-regeneratorruntime-is-not-defined) arrojará algo de luz sobre el problema. Siendo la solución previa a este problema la instalación de [babel-polyfill](https://babeljs.io/docs/en/babel-polyfill/), la cual está [obsoleta](https://babeljs.io/docs/en/babel-polyfill/), ahora tenemos que instalar dos dependencias más, que son [core-js](https://www.npmjs.com/package/core-js) y [regenerator-runtime](https://www.npmjs.com/package/regenerator-runtime):
373
376
374
377
```bash
375
-
npm install @babel/polyfill
378
+
npm install core-js regenerator-runtime
376
379
```
377
-
378
-
379
-
Realicemos los siguientes cambios en la propiedad <i>entry</i> del objeto de configuración de webpack en el archivo i>webpack.config.js</i>:
380
+
Necesitas importar esas dependencias en la parte superior del archivo <i>index.js</i>:
380
381
381
382
```js
382
-
entry: ['@babel/polyfill', './src/index.js']
383
+
import'core-js/stable/index.js'
384
+
import'regenerator-runtime/runtime.js'
383
385
```
384
-
385
386
Nuestra configuración contiene casi todo lo que necesitamos para el desarrollo de React.
386
387
387
-
388
388
### Transpiladores
389
389
390
390
El proceso de transformar código de una forma de JavaScript a otra se denomina [transpilación](https://en.wiktionary.org/wiki/transpile). La definición general del término es compilar código fuente transformándolo de un ilenguaje a otro.
0 commit comments