125 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			125 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | title: Writing Code for Your Es6 React with Webpack Project | ||
|  | localeTitle: Escribir código para su proyecto Es6 React con Webpack | ||
|  | --- | ||
|  | ## dist / index.html
 | ||
|  | 
 | ||
|  | Podemos ir ahora a abrir nuestro `dist/index.html` . Esta será la única página HTML que carga toda nuestra aplicación. No necesitamos mucho código para este archivo, solo lo suficiente para: | ||
|  | 
 | ||
|  | *   Establezca un elemento para React DOM en `src/js/client.js` . | ||
|  | *   Enlace a nuestro archivo JavaScript incluido (que aún no existe). | ||
|  | 
 | ||
|  | Por lo tanto, este es el aspecto que tendrá nuestro archivo `dist/index.html` : | ||
|  | ``` | ||
|  | <!DOCTYPE html>  | ||
|  |  <html lang="en">  | ||
|  |  <head>  | ||
|  |   <meta charset="UTF-8">  | ||
|  |   <title>React Webpack Example</title>  | ||
|  |  </head>  | ||
|  |  <body>  | ||
|  |   <!-- React app will be injected into the following `div` element: -->  | ||
|  |   <div id="app"></div>  | ||
|  |   <!-- Include bundled JavaScript: -->  | ||
|  |   <script src="bundle.js"></script>  | ||
|  |  </body>  | ||
|  |  </html>  | ||
|  | ``` | ||
|  | 
 | ||
|  | Quizás se esté preguntando por qué esta página se vincula con un `bundle.js` cuando todo lo que tenemos hasta ahora es un `src/js/client.js` . Esto se revelará más adelante cuando escribamos nuestro archivo de configuración de Webpack. | ||
|  | 
 | ||
|  | ## src / js / client.js
 | ||
|  | 
 | ||
|  | Ahora es el momento de escribir un código React. Al igual que en el archivo `dist/index.html` , por ahora escribiremos solo el código suficiente para que la aplicación funcione, por lo que no se requerirá mucho código: | ||
|  | ``` | ||
|  | import React from 'react';  | ||
|  |  import ReactDOM from 'react-dom';  | ||
|  |   | ||
|  |  class Main extends React.Component {  | ||
|  |   render() {  | ||
|  |     return (  | ||
|  |       <div>  | ||
|  |         <h1>This is one cool app!</h1>  | ||
|  |       </div>  | ||
|  |     );  | ||
|  |   }  | ||
|  |  }  | ||
|  |   | ||
|  |  const app = document.getElementById('app');  | ||
|  |  ReactDOM.render(<Main />, app);  | ||
|  | ``` | ||
|  | 
 | ||
|  | El código que parece elementos HTML es en realidad JSX, que es parte de React. | ||
|  | 
 | ||
|  | *   [Ayuda: Más sobre JSX](http://buildwithreact.com/tutorial/jsx) | ||
|  | 
 | ||
|  | Para explicar lo que está pasando en este archivo, lo desglosaremos: | ||
|  | 
 | ||
|  | *   Primero, estamos importando `React` y `ReactDOM` . Estos son necesarios para cualquier archivo React que se use para inyectar código en el DOM. El `ReactDOM` es un DOM virtual, y no es lo mismo que el Modelo de Objeto de Documento estándar. | ||
|  |      | ||
|  | *   [Ayuda: Más sobre React DOM](https://facebook.github.io/react/docs/glossary.html) | ||
|  |      | ||
|  |     *   A continuación, estamos creando una clase React. Las clases fueron agregadas a JavaScript en ES6. Por lo tanto, este es el método ES6 para escribir una clase React, pero, por supuesto [, también podemos escribir una en ES5](https://toddmotto.com/react-create-class-versus-component/) . | ||
|  | *   [Ayuda: Más sobre las clases de ES6](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes) | ||
|  |      | ||
|  | 
 | ||
|  | Cada clase React tiene un método de `render` . En este caso, el método de `render` está `return` un elemento `div` JSX. Esto es lo que veremos en cualquier archivo React. La clase puede contener otros métodos que deben aparecer antes que el método de `render` , que siempre va al final de una clase. | ||
|  | 
 | ||
|  | *   Por último, estamos vinculando React con nuestro `index.html` . Configuramos la `app` para que sea la ubicación donde queramos que se inyecte nuestro código React. Y finalmente, usando ReactDOM, inyectamos el componente que escribimos, `<Main />` , en la aplicación, que en este caso es el `div` con el `id` de la `app` . | ||
|  | 
 | ||
|  | ## webpack.config.js
 | ||
|  | 
 | ||
|  | Todavía queda un archivo más por escribir antes de que nuestro proyecto esté listo. Es el archivo de configuración de Webpack. Al principio, los archivos `webpack.config.js` pueden ser confusos, pero a menudo no son tan complejos como parecen. | ||
|  | 
 | ||
|  | En este caso, en su forma más básica, un `webpack.config.js` exporta un objeto que tiene las siguientes propiedades: | ||
|  | 
 | ||
|  | | Propiedad | Papel   | ||
|  | | --- | --- |   | ||
|  | | entrada | Lo que entra: el punto de entrada de la aplicación. En este caso, es `src/js/client.js` . |   | ||
|  | | salida | Lo que sale: lo que Webpack va a agrupar para nosotros. En este caso, es lo que sea que lo `webpack.config.js` en el `webpack.config.js` . |   | ||
|  | | cargadoras | Las tareas que va a realizar Webpack. | | ||
|  | 
 | ||
|  | Aquí es cómo se `webpack.config.js` archivo `webpack.config.js` : | ||
|  | ``` | ||
|  | var path = require('path');  | ||
|  |  var srcPath = path.join(__dirname, 'src');  | ||
|  |  var buildPath = path.join(__dirname, 'dist');  | ||
|  |   | ||
|  |  module.exports = {  | ||
|  |   context: srcPath,  | ||
|  |   entry: path.join(srcPath, 'js', 'client.js'),  | ||
|  |   output: {  | ||
|  |       path: buildPath,  | ||
|  |       filename: "bundle.js"  | ||
|  |   },  | ||
|  |   module: {  | ||
|  |       loaders: <a href='https://en.wikipedia.org/wiki/Don%27t_repeat_yourself' target='_blank' rel='nofollow'>  | ||
|  |           {  | ||
|  |             test: /\.jsx?$/,  | ||
|  |             exclude: /(node_modules|bower_components)/,  | ||
|  |             loader: 'babel',  | ||
|  |             query: {  | ||
|  |               presets: ['react', 'es2015']  | ||
|  |             }  | ||
|  |           }  | ||
|  |       ]  | ||
|  |   }  | ||
|  |  };  | ||
|  | ``` | ||
|  | 
 | ||
|  | Nuevamente, vamos a desglosarlo para que quede claro lo que está haciendo este archivo: | ||
|  | 
 | ||
|  | *   En primer lugar, estamos requiriendo de NodeJS `path` módulo de manera que podemos manejar las rutas de archivos, que se requiere para el ajuste del objeto de `context` . Es muy importante usar este módulo en lugar de intentar y concatenar directorios con cadenas, ya que algunos sistemas operativos, como Windows, lo requieren. | ||
|  |      | ||
|  | *   Luego, especificamos un `srcPath` y un `buildPath` usando el módulo de `path` que solo requerimos. Hacer esto asegurará que tengamos \[SECADO, código legible. | ||
|  |      | ||
|  | *   Ahora llega el momento de escribir el objeto. Las propiedades que vamos a utilizar son todas relevantes para Webpack. | ||
|  |      | ||
|  |     *   Primero proporcionamos un contexto, que simplemente especifica dónde está nuestra aplicación. Se refiere a la variable de `context` que acabamos de crear. | ||
|  |     *   Luego especificamos el punto de entrada, que es, por supuesto, la aplicación React que escribimos anteriormente ( `src/js/client.js` ). | ||
|  |     *   A continuación, especificamos el nombre del archivo empaquetado que Webpack crea cuando se ejecuta. En este caso es `dist/bundle.js` . ¿Suena familiar? Debería hacerlo, porque este es el archivo al que nos vinculamos desde nuestro `dist/index.html` ! | ||
|  |     *   Finalmente viene la propiedad de `module` , que contiene una matriz, `loaders` , que actualmente contiene un solo objeto. Las propiedades de este objeto le dicen a Webpack qué archivos JavaScript se están escribiendo con ES6 y React, de modo que su cargador, `babel` , pueda ejecutarse en consecuencia cuando se ejecuta `webpack.config.js` . Esto es, en gran medida, un código repetitivo que podemos ver en [la página Léame de Babel Loader](https://github.com/babel/babel-loader) . | ||
|  | 
 | ||
|  | Si `webpack.config.js` es confuso ahora, no se preocupe, siempre y cuando entienda lo que hay que hacer. | ||
|  | 
 | ||
|  | *   [Ayuda: Más sobre escribir un archivo de configuración de Webpack](https://webpack.github.io/docs/tutorials/getting-started/#config-file) |