< Back

Entorno

Como configurar un proyecto Typescript


Para crear un proyecto web en Typescript, hay determinados archivos y frameworks que es necesario conocer

TSConfig

TSConfig

Fichero compilación de TypeScript, al principio puede parecer muy confuso pero hay solo unas pocas configuraciones que son necesarias al principio.

Webpack

Webpack es un empaquetador o bundler. Su finalidad será coger todos los archivos de un proyecto como son los ficheros javascript, de css, imágenes, gifs… Y agruparlos en un único archivo que contendrá toda la lógica y los recursos.

Webpack

Los principales beneficios de implementar Webpack son los siguientes:

El principal problema es la alta curva de aprendizaje que requiere esta herramienta. Aún así, Frameworks tan famosos como React lo utilizan (sin exponer su dificultosa configuración) para gestionar la compilación del código.

La estructura del fichero Webpack de nuestro proyecto es la siguiente:

const webpack = require("webpack");
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const FaviconsWebpackPlugin = require("favicons-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

const config = {
  entry: "./src/index.ts",
  devtool: "inline-source-map",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "bundle.js",
  },
  module: {
    rules: [
      {
        test: /\.html$/,
        use: [
          {
            loader: "html-loader",
            options: { minimize: true },
          },
        ],
      },
      {
        test: /\.ts(x)?$/,
        loader: "ts-loader",
        exclude: /node_modules/,
      },
      {
        test: /\.css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
      {
        test: /\.scss$/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
      {
        test: /\.(png|jpg|jpeg|gif)$/i,
        type: "asset/resource",
      },
    ],
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: "index.html",
      template: "src/index.html",
    }),
    new MiniCssExtractPlugin(),
    new FaviconsWebpackPlugin("./src/images/icon.png"),
  ],
  resolve: {
    extensions: [".tsx", ".ts", ".js"],
  },
  devServer: {
    contentBase: path.join(__dirname, "dist"),
    compress: true,
    port: 9000,
  },
};

module.exports = config;

Vamos a repasar por encima algunas configuraciones: