Skip to content

Commit ecf204a

Browse files
committed
loaders update tweak
1 parent 6172091 commit ecf204a

File tree

1 file changed

+72
-72
lines changed

1 file changed

+72
-72
lines changed

src/content/7/es/part7d.md

Lines changed: 72 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,23 @@ const config = () => {
120120

121121
module.exports = config
122122
```
123+
**Nota:** es posible definirlo directamente como un objeto en lugar de una función:
123124

125+
```js
126+
const path = require('path')
127+
128+
const config = {
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.
124140

125141
Luego definiremos un nuevo script npm llamado <i>build</i> que ejecutará el empaquetado con webpack:
126142

@@ -141,14 +157,15 @@ const hello = name => {
141157
}
142158
```
143159

144-
145160
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>:
146161

147162
![](../../images/7/19x.png)
148163

149164
El archivo contiene muchas cosas que parecen bastante interesantes. También podemos ver el código que escribimos anteriormente al final del archivo:
150165

151-
![](../../images/7/19eb.png)
166+
```js
167+
eval("const hello = name => {\n console.log(`hello ${name}`)\n}\n\n//# sourceURL=webpack://webpack-osa7/./src/index.js?");
168+
```
152169

153170
Agreguemos un archivo <i>App.js</i> en el directorio <i>src</i> con el siguiente contenido:
154171

@@ -178,46 +195,22 @@ Cuando empaquetamos la aplicación nuevamente con el comando _npm run build_, no
178195

179196
El código de nuestra aplicación se puede encontrar al final del archivo del paquete en un formato bastante oscuro:
180197

181-
```js
182-
/***/ "./src/App.js":
183-
/*!********************!*\
184-
!*** ./src/App.js ***!
185-
\********************/
186-
/*! exports provided: default */
187-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
188-
189-
"use strict";
190-
eval("__webpack_require__.r(__webpack_exports__);\nconst App = () => {\n return null\n}\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (App);\n\n//# sourceURL=webpack:///./src/App.js?");
191-
192-
/***/ }),
193-
194-
/***/ "./src/index.js":
195-
/*!**********************!*\
196-
!*** ./src/index.js ***!
197-
\**********************/
198-
/*! no exports provided */
199-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
200-
201-
"use strict";
202-
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+
![](../../images/7/20z.png)
207199

208200
### Archivo de configuración
209201

210-
211202
Echemos un vistazo más de cerca al contenido de nuestro archivo <i>webpack.config.js</i> actual:
212203

213204
```js
214205
const path = require('path')
215206

216-
const config = {
217-
entry: './src/index.js',
218-
output: {
219-
path: path.resolve(__dirname, 'build'),
220-
filename: 'main.js'
207+
const config = () => {
208+
return {
209+
entry: './src/index.js',
210+
output: {
211+
path: path.resolve(__dirname, 'build'),
212+
filename: 'main.js'
213+
}
221214
}
222215
}
223216

@@ -226,7 +219,6 @@ module.exports = config
226219

227220
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.
228221

229-
230222
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.
231223

232224

@@ -245,20 +237,24 @@ Y convirtamos nuestra aplicación en una aplicación React agregando las definic
245237

246238
```js
247239
import React from 'react'
248-
import ReactDOM from 'react-dom'
240+
import ReactDOM from 'react-dom/client'
249241
import App from './App'
250242

251-
ReactDOM.render(<App />, document.getElementById('root'))
243+
ReactDOM.createRoot(document.getElementById('root')).render(<App />)
252244
```
253245

254246
También realizaremos los siguientes cambios en el archivo <i>App.js</i>:
255247

256248
```js
257-
import React from 'react'
249+
import React from 'react' // necesitamos esto también ahora en los archivos los componentes
258250

259-
const App = () => (
260-
<div>hello webpack</div>
261-
)
251+
const App = () => {
252+
return (
253+
<div>
254+
hello webpack
255+
</div>
256+
)
257+
}
262258

263259
export default App
264260
```
@@ -290,40 +286,47 @@ El mensaje de error del paquete web indica que es posible que necesitemos un <i>
290286

291287
```js
292288
const App = () => {
293-
return <div>hello webpack</div>
289+
return (
290+
<div>
291+
hello webpack
292+
</div>
293+
)
294294
}
295295
```
296296

297-
298297
La sintaxis utilizada anteriormente proviene de JSX y nos proporciona una forma alternativa de definir un elemento React para una etiqueta <i>div</i>.
299298

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.
303300

304301
Configuremos un cargador para nuestra aplicación que transforme el código JSX en JavaScript normal:
305302

306303
```js
307-
const config = {
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+
const path = require('path')
305+
306+
const config = () => {
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+
},
321322
},
322-
},
323-
],
324-
},
325-
// highlight-end
323+
],
324+
},
325+
// highlight-end
326+
}
326327
}
328+
329+
module.exports = config
327330
```
328331

329332

@@ -369,22 +372,19 @@ Puede probar la aplicación incluida abriendo el archivo <i>build/index.html</i>
369372
![](../../images/7/22.png)
370373

371374

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):
373376

374377
```bash
375-
npm install @babel/polyfill
378+
npm install core-js regenerator-runtime
376379
```
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>:
380381

381382
```js
382-
entry: ['@babel/polyfill', './src/index.js']
383+
import 'core-js/stable/index.js'
384+
import 'regenerator-runtime/runtime.js'
383385
```
384-
385386
Nuestra configuración contiene casi todo lo que necesitamos para el desarrollo de React.
386387

387-
388388
### Transpiladores
389389

390390
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

Comments
 (0)