Para crear una aplicación React utilizando TypeScript y Webpack, siga estos pasos:
1. Inicialización del Proyecto
Cree un nuevo directorio para su proyecto y navegue hasta él:
mkdir webpack-react-ts
cd webpack-react-ts
Inicialice el archivo package.json con Yarn:
yarn init -y
El contenido inicial de package.json será similar al siguiente:
{
"name": "webpack-react-ts",
"version": "1.0.0",
"main": "index.js",
"license": "MIT"
}
2. Instalación de Dependencias
Añada las siguientes dependencias en su archivo package.json:
"dependencies": {
"react": "^16.12.0",
"react-dom": "^16.12.0"
},
"devDependencies": {
"@babel/core": "^7.7.7",
"@babel/preset-env": "^7.7.7",
"@babel/preset-react": "^7.7.4",
"@babel/preset-typescript": "^7.7.7",
"@types/node": "^12.12.5",
"@types/react": "^16.9.11",
"@types/react-dom": "^16.9.3",
"babel-loader": "^8.0.6",
"cross-env": "^6.0.3",
"html-webpack-plugin": "^3.2.0",
"serve": "^11.3.0",
"terser-webpack-plugin": "^2.3.2",
"typescript": "^3.7.4",
"webpack": "^4.41.5",
"webpack-cli": "^3.3.10",
"webpack-dev-server": "^3.10.1"
}
Ejecute el siguiente comando para instalar las dependencias:
yarn install
3. Configuración de Scripts
Añada los siguientes scripts en su archivo package.json:
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server",
"build": "cross-env NODE_ENV=production webpack",
"start": "serve dist"
}
4. Configuración de Babel
Cree un archivo .babelrc con la siguiente configuración:
{
"presets": ["@babel/env", "@babel/react", "@babel/typescript"]
}
5. Configuración de TypeScript
Ejecute el siguiente comando para generar un archivo tsconfig.json básico:
tsc --init
Luego, modifique el archivo tsconfig.json para incluir las siguientes opciones:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"jsx": "react",
"moduleResolution": "node",
"strict": true,
"noEmit": true,
"allowJs": true,
"skipLibCheck": true,
"isolatedModules": true,
"esModuleInterop": true
},
"include": ["src"]
}
6. Configuración de Webpack
Cree un archivo webpack.config.js con la siguiente configuración:
const { resolve } = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const TerserWebpackPlugin = require('terser-webpack-plugin');
const esProduccion = process.env.NODE_ENV === 'production';
const configuracion = {
mode: esProduccion ? 'production' : 'development',
entry: {
principal: './src/entrada.tsx',
},
output: {
path: resolve(__dirname, 'dist'),
filename: 'paquete.js',
},
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'babel-loader',
exclude: /node_modules/,
},
],
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
filename: 'index.html',
inject: 'body',
}),
],
};
if (esProduccion) {
configuracion.optimization = {
minimizer: [new TerserWebpackPlugin()],
};
} else {
configuracion.devServer = {
puerto: 9000,
abrir: true,
caliente: true,
comprimir: true,
estadisticas: 'errores-solo',
superposición: true,
};
}
module.exports = configuracion;
7. Creación de Archivos React
Cree los siguientes archivos dentro de un directorio src:
- index.html
<html lang="es">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Webpack con React y TypeScript</title>
</head>
<body></body>
</html>
- entrada.tsx
import React from 'react';
import { render } from 'react-dom';
import ComponentePrincipal from './ComponentePrincipal';
render(<ComponentePrincipal />, document.body);
- ComponentePrincipal.tsx
import React from 'react';
const ComponentePrincipal: React.FC = () => {
return <div>¡Webpack es genial!</div>;
};
export default ComponentePrincipal;
8. Ejecución de la Aplicación
Puede iniciar el servidor de desarrollo, constriur la aplicación o iniciar el servicio de producción con los siguientes comandos:
yarn dev: Inicia el servidor de desarrollo.yarn build: Construye la aplicación.yarn start: Inicia el servicio de producción.