<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: JEstebanDev</title>
    <description>The latest articles on DEV Community by JEstebanDev (@jestebandev).</description>
    <link>https://dev.to/jestebandev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1070394%2F4f9b77bc-e0bf-41cb-9172-3bba52185606.JPEG</url>
      <title>DEV Community: JEstebanDev</title>
      <link>https://dev.to/jestebandev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jestebandev"/>
    <language>en</language>
    <item>
      <title>Configuración de Variables de Entorno en Angular 20</title>
      <dc:creator>JEstebanDev</dc:creator>
      <pubDate>Sun, 19 Oct 2025 23:58:10 +0000</pubDate>
      <link>https://dev.to/jestebandev/configuracion-de-variables-de-entorno-en-angular-20-37nn</link>
      <guid>https://dev.to/jestebandev/configuracion-de-variables-de-entorno-en-angular-20-37nn</guid>
      <description>&lt;h2&gt;
  
  
  Descripción General
&lt;/h2&gt;

&lt;p&gt;Este proyecto utiliza la librería &lt;code&gt;@ngx-env/builder&lt;/code&gt; para manejar variables de entorno de manera segura y eficiente en aplicaciones Angular. Este enfoque permite inyectar variables de entorno durante el proceso de build, manteniendo la seguridad y flexibilidad necesarias para diferentes entornos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitectura del Sistema
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Dependencias Principales
&lt;/h3&gt;

&lt;p&gt;El proyecto utiliza las siguientes dependencias clave:&lt;/p&gt;

&lt;p&gt;para instalar &lt;code&gt;npm i @ngx-env/builder&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@ngx-env/builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^20.1.1"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Configuración del Builder
&lt;/h3&gt;

&lt;p&gt;En &lt;code&gt;angular.json&lt;/code&gt;, el proyecto está configurado para usar el builder personalizado de @ngx-env:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"architect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@ngx-env/builder:application"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"browser"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/main.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"tsConfig"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"tsconfig.app.json"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"serve"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@ngx-env/builder:dev-server"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Proceso de Configuración Paso a Paso
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Paso 1: Definir Variables de Entorno
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1.1 Crear archivo &lt;code&gt;.env&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Puedes crear un archivo &lt;code&gt;.env&lt;/code&gt; en la raíz del proyecto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# .env&lt;/span&gt;
&lt;span class="nv"&gt;NG_APP_ANGULAR_VALUE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Mi valor de desarrollo
&lt;span class="nv"&gt;NG_APP_API_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://api-dev.ejemplo.com
&lt;span class="nv"&gt;NG_APP_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 2: Definir Tipos TypeScript
&lt;/h3&gt;

&lt;p&gt;En &lt;code&gt;src/env.d.ts&lt;/code&gt;, define las interfaces para tus variables de entorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NODE_ENV&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_ANGULAR_VALUE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_API_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usar _NGX_ENV_ (personalizable)&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 3: Configurar Archivos de Entorno
&lt;/h3&gt;

&lt;h4&gt;
  
  
  3.1 Archivo de Desarrollo (&lt;code&gt;src/environment/environment.ts&lt;/code&gt;)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_ANGULAR_VALUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_VERSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3.2 Archivo de Producción (&lt;code&gt;src/environment/environment.prod.ts&lt;/code&gt;)
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_ANGULAR_VALUE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_VERSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Paso 4: Usar Variables en el Código
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://medium.com/@philip.mutua/setting-up-environment-variables-for-an-angular-application-from-scratch-737028f8b7b3" rel="noopener noreferrer"&gt;Tutorial para el paso 4 tambien util&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  4.1 Importar el entorno
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./environment/environment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MiComponente&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mensaje:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mensaje&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;API URL:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Versión:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Convenciones de Nomenclatura
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Variables de Entorno
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prefijo obligatorio&lt;/strong&gt;: Todas las variables deben comenzar con &lt;code&gt;NG_APP_&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplos válidos&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NG_APP_API_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NG_APP_VERSION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NG_APP_DEBUG_MODE&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Variables del Sistema
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NODE_ENV&lt;/code&gt;: Se configura automáticamente&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NG_APP_*&lt;/code&gt;: Variables personalizadas de la aplicación&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Comandos de Build y Desarrollo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;my-angular-app
└── src
    └── environments
        ├── environment.ts
        ├── environment.development.ts
        ├── environment.pilot.ts
        └── environment.production.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora tendras que modificar el &lt;code&gt;angular.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fileReplacements"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"replace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"with"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.prod.ts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputHashing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sourceMap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractCss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"namedChunks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractLicenses"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"development"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fileReplacements"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"replace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"with"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.development.ts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sourceMap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractCss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"namedChunks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"pilot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fileReplacements"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"replace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"with"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.staging.ts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"outputHashing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sourceMap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractCss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"namedChunks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractLicenses"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"development"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"fileReplacements"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"replace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"with"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"src/environments/environment.development.ts"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"optimization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"sourceMap"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"extractCss"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"namedChunks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el mismo archivo &lt;code&gt;angular.json&lt;/code&gt; tendras que modificar el &lt;code&gt;serve&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"serve"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@angular-devkit/build-angular:dev-server"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"buildTarget"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-angular-app:build:production"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"development"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"buildTarget"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-angular-app:build:development"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"pilot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"buildTarget"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-angular-app:build:pilot"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"defaultConfiguration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"development"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego tendras que agregar los comandos personalizados &lt;code&gt;package.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"my-angular-app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ng"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng serve"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng build"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"test"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng test"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng lint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"e2e"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng e2e"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start:dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng serve --configuration=development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start:pilot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng serve --configuration=pilot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start:prod"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng serve --configuration=production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build:dev"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng build --configuration=development"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build:pilot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng build --configuration=pilot"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"build:prod"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ng build --configuration=production"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"private"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"devDependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ⚠️ Limitaciones Importantes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Variables Secretas - NO RECOMENDADO
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Este enfoque NO es seguro para variables secretas&lt;/strong&gt; por las siguientes razones:&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Exposición en el Cliente
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Las variables se inyectan en tiempo de build&lt;/li&gt;
&lt;li&gt;Se incluyen en el bundle JavaScript final&lt;/li&gt;
&lt;li&gt;Son visibles para cualquier usuario que inspeccione el código&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  2. Acceso Público
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ NUNCA hagas esto con secretos&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// ¡VISIBLE EN EL CLIENTE!&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Alternativas Seguras para Secretos
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Para variables secretas, usa:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Backend Proxy&lt;/strong&gt;: El frontend solicita datos al backend, que maneja los secretos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Keys Públicas&lt;/strong&gt;: Solo para APIs que requieren keys públicas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autenticación JWT&lt;/strong&gt;: Tokens temporales generados por el backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variables de Servidor&lt;/strong&gt;: Configurar en el servidor web (nginx, Apache)&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Ejemplo de Implementación Segura:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// ❌ Incorrecto - secreto en el frontend&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secretKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// ✅ Correcto - solicitar al backend&lt;/span&gt;
&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/data&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;subscribe&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// El backend maneja los secretos&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Casos de Uso Apropiados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Variables Seguras para el Cliente
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;URLs de APIs públicas&lt;/li&gt;
&lt;li&gt;Configuraciones de UI&lt;/li&gt;
&lt;li&gt;Versiones de aplicación&lt;/li&gt;
&lt;li&gt;Flags de características&lt;/li&gt;
&lt;li&gt;Configuraciones de entorno (dev/staging/prod)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ Variables que NO deben usarse
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API keys secretas&lt;/li&gt;
&lt;li&gt;Tokens de autenticación&lt;/li&gt;
&lt;li&gt;Credenciales de base de datos&lt;/li&gt;
&lt;li&gt;Claves de encriptación&lt;/li&gt;
&lt;li&gt;Cualquier información sensible&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mejores Prácticas
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prefijo consistente&lt;/strong&gt;: Siempre usa &lt;code&gt;NG_APP_&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tipado fuerte&lt;/strong&gt;: Define interfaces en &lt;code&gt;env.d.ts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valores por defecto&lt;/strong&gt;: Proporciona fallbacks cuando sea posible&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentación&lt;/strong&gt;: Documenta todas las variables requeridas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validación&lt;/strong&gt;: Valida variables críticas en tiempo de ejecución&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ejemplo Completo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Estructura de archivos:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── env.d.ts
├── environment/
│   ├── environment.ts
│   └── environment.prod.ts
└── app/
    └── mi-componente.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configuración completa:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// env.d.ts&lt;/span&gt;
&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_API_URL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_VERSION&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;readonly&lt;/span&gt; &lt;span class="nx"&gt;NG_APP_DEBUG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kr"&gt;declare&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Env&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// environment.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;production&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_API_URL&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_VERSION&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1.0.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;_NGX_ENV_&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NG_APP_DEBUG&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este enfoque proporciona una solución robusta y segura para manejar variables de entorno en aplicaciones Angular, manteniendo la separación entre configuraciones públicas y secretos sensibles.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>tooling</category>
      <category>angular</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cómo Conseguir Empleo sin Morir en el Intento 💀</title>
      <dc:creator>JEstebanDev</dc:creator>
      <pubDate>Sun, 14 Sep 2025 06:05:34 +0000</pubDate>
      <link>https://dev.to/jestebandev/como-conseguir-empleo-sin-morir-en-el-intento-1bg2</link>
      <guid>https://dev.to/jestebandev/como-conseguir-empleo-sin-morir-en-el-intento-1bg2</guid>
      <description>&lt;p&gt;¡Qué mas parceros bien o no! ¿Cómo están? 😎 Bienvenidos a otro vlog donde vamos a hablar de un tema que a todos nos ha quitado el sueño alguna vez: &lt;strong&gt;¡Cómo conseguir empleo sin morir en el intento!&lt;/strong&gt; 😵&lt;/p&gt;

&lt;p&gt;Y no, no es exageración. A veces parece que para conseguir trabajo necesitas la experiencia de un veterano de 50 años, la energía de un adolescente de 15 y el sueldo de un becario. ¡Un chiste! 😂 Ves una oferta de empleo y ¡PUM! 💥 100 personas ya aplicaron. Sientes que tu CV se va a un agujero negro del que jamás regresa. 🌌&lt;/p&gt;

&lt;p&gt;Pero no teman, porque hoy su compa favorito les trae un roadmap. 🗺️ Basado en mi propia experiencia, en mis tropiezos y en todo lo que he aprendido. Así que pónganse cómodos, traigan su cafecito y ¡empecemos! ☕️&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 1: La Fundación - ¡Construyendo tu Arsenal! ⚔️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Antes de ir a la guerra, necesitas tus armas. Y no, no hablo de espadas ni nada de eso, ¡tranquilos! Hablo de lo que te hará irresistible para los reclutadores. 💪&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. ¿Sin experiencia? ¡Crea la tuya! ✨&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Este es el clásico "necesitas experiencia para tener experiencia". ¡Qué dolor de cabeza! 😫 Lastimosamente, sin experiencia laboral, muchos te van a cerrar la puerta en la cara. 🚪👋 ¿Mi consejo de oro? &lt;strong&gt;¡Crea proyectos REALES que solucionen problemas REALES!&lt;/strong&gt; 💡&lt;/p&gt;

&lt;p&gt;Piensa en algo que te moleste, algo que un amigo necesite, o un pequeño negocio de tu barrio. ¿Puedes hacerles una web? ¿Automatizarles un proceso? ¡Hazlo! Y si puedes ganar algo de dinero con ello, ¡mucho mejor! 💰&lt;/p&gt;

&lt;p&gt;Esto hace dos cosas mágicas: 🪄&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Reafirma lo que sabes y te muestra en qué necesitas mejorar. Adiós, síndrome del impostor. 👋&lt;/li&gt;
&lt;li&gt; ¡Te da experiencia demostrable! Ya no eres "alguien que estudió X", eres "la persona que hizo Y proyecto que logró Z resultado". 🏆&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. Conocimientos y Habilidades Clave 🔑&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Tecnologías 💻:&lt;/strong&gt; Abre 10 ofertas de trabajo para el puesto que sueñas. ¿Ves que todas piden React, Python y AWS? ¡Esa es tu lista de estudio! Haz proyectos personales usando esas herramientas. No solo leas, ¡CONSTRUYE! 🏗️&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;¡El Inglés, por favor! 🗣️:&lt;/strong&gt; ¿Quieres resaltar de verdad y multiplicar tus ingresos? 💸 ¡Aprende inglés! Y ojo, no necesitas ser un C2. A los reclutadores les importa que entiendas y te hagas entender. ¡Que la conversación fluya! Hoy con la IA tienes miles de herramientas para practicar, ¡no hay excusas! 😤&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Inteligencia Artificial (IA) 🤖:&lt;/strong&gt; Esto ya no es opcional, es &lt;strong&gt;OBLIGATORIO&lt;/strong&gt; ‼️. Aprende a usar las herramientas de IA como tu copiloto. Te ayudarán a aprender más rápido, a resolver problemas y a mejorar tu código. Pero ¡cuidado! La IA no es perfecta, a veces se equivoca porque no entiende el contexto. Úsala como un asistente súper inteligente, no como tu cerebro. 🧠&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 2: El Empaque - ¡Cómo Vender tu Talento! 🎁&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ya tienes las habilidades, ¡genial! Ahora hay que presentarlas de una forma que la gente diga: "¡Necesito a esta persona en mi equipo!". 🙌&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. Tu CV: El Héroe de la Historia 🦸‍♂️&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Tu CV es tu carta de presentación. ¡Es lo más importante! 💯&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Formato ATS:&lt;/strong&gt; Muchos CVs son leídos primero por un robot (un sistema ATS). Si no le gusta el formato, ¡a la basura! 🗑️ &lt;a href="https://okey.uno/ats/plantillas-de-curriculum/" rel="noopener noreferrer"&gt;Busca plantillas "ATS-Friendly"&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;¡Véndete! 📣:&lt;/strong&gt; Ahora que tienes experiencia (de tus proyectos, ¿recuerdas?), descríbela como un campeón. En 3 o 4 puntos por proyecto/empleo, explica qué problema solucionaste y qué resultado lograste. Tu CV debe gritar: "¡Soy increíble!". 😎 Apréndetelo como la palma de tu mano, porque te lo van a preguntar.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. Tu Portafolio: La Galería de Arte 🎨&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Arma un portafolio online que demuestre quién eres y qué eres capaz de hacer. Muestra tus proyectos, explica el proceso, pon links. ¡Que la gente vea tu trabajo en acción! 👀 Si no sabes por dónde empezar, te dejo una figma que hice, &lt;a href="https://www.behance.net/gallery/179503415/Developer-Portfolio-20" rel="noopener noreferrer"&gt;no mas para que digas que no te consiento.&lt;/a&gt; 😉 &lt;br&gt;
Y si el front-end no es tu especialidad, hay muchas herramientas que puedes usar no-code para crear un portafolio, te dejo algunas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lovable.dev/" rel="noopener noreferrer"&gt;Lovable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bolt.new/" rel="noopener noreferrer"&gt;Bolt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0.app/" rel="noopener noreferrer"&gt;v0 By Vercel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.weweb.io/" rel="noopener noreferrer"&gt;weweb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bubble.io/" rel="noopener noreferrer"&gt;bubble&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 3: La Cacería - ¡Estrategia y Acción! 🎯&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;¡Listos para la acción! 🔥 Aquí es donde aplicamos y nos enfrentamos al mundo.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. La Postulación Inteligente 🧐&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;No dispares a todo lo que se mueva. 🔫❌&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Filtra bien:&lt;/strong&gt; Busca empresas que te ayuden a crecer. Investígalas en Glassdoor, lee los comentarios, ¡habla con gente que trabaje ahí por LinkedIn! 🕵️‍♂️&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Calidad sobre cantidad:&lt;/strong&gt; Envía al menos 5 postulaciones al día, pero bien hechas. Lleva un registro en un Excel. Sí, puede ser duro ver cuántas envías y cuántas responden, pero esos datos son &lt;strong&gt;VALIOSÍSIMOS&lt;/strong&gt; 💎 para ver si tu CV está funcionando o si necesita ajustes.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;El tiempo es oro ⏳:&lt;/strong&gt; Postúlate a ofertas que tengan menos de 3 días. ¡Así aumentas tus chances de que te vean!&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. La Entrevista: ¡Tu Momento de Brillar! ✨&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;¡El que mejor comunica, GANA! 🏆&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Apréndete tu speech:&lt;/strong&gt; Tienes que sonar como disco rayado, pero el mejor disco rayado de la historia. 💿 Prepara tu presentación, tus fortalezas, tus proyectos. Practica con la IA, grábate, ¡lo que sea necesario! Con cada entrevista, irás puliendo tu discurso.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Cada entrevista es una clase gratis 🎓:&lt;/strong&gt; Míralo así. Aprendes algo nuevo, practicas y mejoras. Y siempre, SIEMPRE, pide feedback al final. 🙏&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;C. Las Pruebas Técnicas: El Jefe Final 👾&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Ok, seamos honestos. Muchas pruebas técnicas son... terribles. 🤢 Te piden algoritmos que nunca usarás o que construyas un sistema entero en un fin de semana. La realidad es que la mayoría de empresas las siguen usando. Así que, dedica tiempo a la semana a practicar en plataformas como LeetCode o HackerRank. No es lo ideal, pero es el juego que hay que jugar. Te dejo unos videos que me ayudaron a abordar estas pruebas sin querer lanzar la computadora por la ventana. 💻💥 &lt;br&gt;
&lt;a href="https://youtu.be/Q4C3ZRJLnac?si=V61d5xXrGW17u_XS" rel="noopener noreferrer"&gt;How to Solve ANY Coding Interview Question in 6 Steps&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;a href="https://youtu.be/a-thH9a9_XE?si=5Mi5FVjnG2NDcTSk" rel="noopener noreferrer"&gt;How to Use LeetCode Effectively&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 4: La Mentalidad - ¡A Prueba de Balas! 🛡️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Esto es lo más importante.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;No te lo tomes personal ❤️‍🩹:&lt;/strong&gt; Los reclutadores a veces desaparecen. 👻 Es feo, pero pasa. No es tu culpa.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Enfócate en lo que puedes controlar 🧘‍♂️:&lt;/strong&gt; Tu CV, tu portafolio, tu preparación. El resto, déjalo ir.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;No cantes victoria antes de tiempo:&lt;/strong&gt; He estado en el último filtro y me han dicho que no. ¡Duele como un 🤬! 😭 Así que mantén la calma y no hagas planes hasta que tengas el contrato firmado en tu mano. ✍️🤝&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Ruta Alternativa: ¡El Camino del Emprendedor! 🚀&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Y si después de todo esto sientes que el mundo corporativo no es para ti, siempre hay otra ruta: emprender. Crear tu propio proyecto, venderte como "solopreneur". Pero ese... es un tema para otro vlog. 😉&lt;/p&gt;

&lt;p&gt;Y bueno, mi gente, ese es el mapa. 🗺️ No es un camino fácil, pero con estrategia, preparación y una buena dosis de paciencia, ¡se puede lograr! 💪 Espero que estos consejos les sirvan un montón.&lt;/p&gt;

&lt;p&gt;Déjenme en los comentarios sus propias experiencias o si tienen algún otro tip. ¡No olviden darle like 👍, suscribirse 🔔 y nos vemos en el próximo vlog! ¡Ánimo, que ustedes pueden! 🙌&lt;/p&gt;

&lt;p&gt;Un abrazo 🤗&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to get a job without losing your mind!</title>
      <dc:creator>JEstebanDev</dc:creator>
      <pubDate>Sun, 14 Sep 2025 05:53:51 +0000</pubDate>
      <link>https://dev.to/jestebandev/how-to-get-a-job-without-losing-your-mind-3ifg</link>
      <guid>https://dev.to/jestebandev/how-to-get-a-job-without-losing-your-mind-3ifg</guid>
      <description>&lt;p&gt;What's up, everyone! How's it going? 😎 Welcome to another vlog where we're going to talk about something that's kept us all up at night: &lt;strong&gt;How to get a job without losing your mind!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And no, that's not an exaggeration. Sometimes it feels like to get a job, you need the experience of a 50-year-old veteran, the energy of a 15-year-old, and an intern's salary. What a joke! 😂 You see a job post and BAM! 💥 100 people have already applied. It feels like your resume is getting sucked into a black hole, never to be seen again.&lt;/p&gt;

&lt;p&gt;But fear not, because today your favorite guide is here with a roadmap🌎. This is all based on my own experience, my screw-ups, and everything I've learned along the way. So get comfy, grab your coffee, and let's dive in! ☕️&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: The Foundation - Building Your Arsenal! ⚔️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before you go to battle, you need your weapons. And no, I'm not talking about swords or anything, chill! I'm talking about what will make you absolutely irresistible to recruiters.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. No Experience? Create Your Own!&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;This is the classic "you need experience to get experience" paradox. It's a total headache! 😫 Sadly, without work experience, many doors will be slammed in your face. My golden tip? &lt;strong&gt;Create REAL projects that solve REAL problems!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think about something that annoys you, something a friend needs, or a small business in your neighborhood. Can you build them a website? Automate a process for them? Just do it! And if you can make some money from it, even better. 💰&lt;/p&gt;

&lt;p&gt;This does two magical things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  It solidifies what you know and shows you where you need to improve. Goodbye, imposter syndrome. 👋&lt;/li&gt;
&lt;li&gt;  It gives you &lt;strong&gt;provable experience!&lt;/strong&gt; You're no longer "someone who studied X," you're "the person who built Y project that achieved Z result."&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. Key Knowledge &amp;amp; Skills&lt;/strong&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Tech Stack 💻:&lt;/strong&gt; Open 10 job offers for the position you're dreaming of. See how they all ask for React, Python, and AWS? That's your study list! Build personal projects using those tools. Don't just read, &lt;strong&gt;BUILD!&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Artificial Intelligence (AI) 🤖:&lt;/strong&gt; This is no longer optional, it's &lt;strong&gt;MANDATORY&lt;/strong&gt;. Learn to use AI tools as your co-pilot. They'll help you learn faster, solve problems, and improve your code. But be careful! AI isn't perfect; it sometimes messes up because it doesn't get the context. Use it as a super-smart assistant, not as your brain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: The Packaging - How to Sell Your Talent! 🎁&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You've got the skills, awesome! Now you have to present them in a way that makes people say, "I NEED this person on my team!"&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. Your Resume: The Hero of the Story&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Your resume is your calling card. It's the most important thing!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;ATS-Friendly Format:&lt;/strong&gt; Many resumes are first read by a robot (an ATS system). If it doesn't like the format, it goes straight to the trash! 🗑️ &lt;a href="https://okey.uno/ats/plantillas-de-curriculum/" rel="noopener noreferrer"&gt;Look for "ATS-Friendly" templates.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Sell Yourself!:&lt;/strong&gt; Now that you have experience (from your projects, remember?), describe it like a champ. In 3 or 4 bullet points per project/job, explain what problem you solved and what result you achieved. Your resume should scream, "I'm awesome!" Know it by heart, because they will ask you about it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. Your Portfolio: The Art Gallery 🎨&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Build an online portfolio that shows who you are and what you can do. Showcase your projects, explain your process, and include links. Let people see your work in action! If you don't know where to start, I'm even dropping a &lt;a href="https://www.behance.net/gallery/179503415/Developer-Portfolio-20" rel="noopener noreferrer"&gt;Figma template I made&lt;/a&gt;, just so you can't say I don't spoil you. 😘&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: The Hunt - Strategy &amp;amp; Action! 🎯&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ready for action! This is where we apply and face the world.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;A. The Smart Application&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Don't just spray and pray.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Filter Smartly:&lt;/strong&gt; Look for companies that will help you grow. Research them on &lt;a href="https://www.glassdoor.com/index.htm" rel="noopener noreferrer"&gt;Glassdoor&lt;/a&gt;, read the reviews, and talk to people who work there on LinkedIn!&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Quality over Quantity:&lt;/strong&gt; Send at least 5 applications a day, but make them good. Keep a log in an Excel sheet. Yes, it can be tough to see how many you've sent versus how many have replied, but that data is &lt;strong&gt;GOLD&lt;/strong&gt; for seeing if your resume is working or if it needs tweaks.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Time is Money:&lt;/strong&gt; Apply to offers that are less than 3 days old. This boosts your chances of being seen!&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;B. The Interview: Your Time to Shine! ✨&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;The best communicator WINS!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Know Your Speech:&lt;/strong&gt; You need to sound like a broken record, but the best broken record in history. Prepare your introduction, your strengths, your projects. Practice with AI, record yourself—whatever it takes! With each interview, you'll polish your script.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Every Interview is a Free Class:&lt;/strong&gt; Look at it this way. You learn something new, you practice, and you improve. And always, ALWAYS, ask for feedback at the end.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;C. The Tech Test: The Final Boss 👾&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Okay, let's be honest. A lot of technical tests are... awful. They ask you to solve algorithms you'll never use or build an entire system over a weekend. The reality is, most companies still use them. So, dedicate some time each week to practicing on platforms like LeetCode or HackerRank. It's not ideal, but it's the game you have to play. I'm leaving you some videos that helped me tackle these tests without wanting to throw my computer out the window. &lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=Q4C3ZRJLnac" rel="noopener noreferrer"&gt;How to Solve ANY Coding Interview Question in 6 Steps&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=a-thH9a9_XE" rel="noopener noreferrer"&gt;How to Use LeetCode Effectively&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: The Mindset - Bulletproof! 🛡️&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This is the most important part.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Don't Take It Personally:&lt;/strong&gt; Recruiters sometimes ghost you. It sucks, but it happens. It's not your fault.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Focus on What You Can Control:&lt;/strong&gt; Your resume, your portfolio, your preparation. Let the rest go.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Don't Count Your Chickens Before They Hatch:&lt;/strong&gt; I've been in the final round and still been told no. It hurts like a 🤬! So stay calm and don't make plans until you have that signed contract in your hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Alternative Route: The Entrepreneur's Path! 🚀&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;And if after all this you feel like the corporate world isn't for you, there's always another path: becoming an entrepreneur. Creating your own project, selling yourself as a "solopreneur." But that... is a topic for another vlog. 😉 (Stay Tuned, Follow me!)&lt;/p&gt;

&lt;p&gt;Alright, everyone, that's the map. It's not an easy path, but with strategy, preparation, and a healthy dose of patience, you can totally do it! I hope these tips help you out a ton.&lt;/p&gt;

&lt;p&gt;Leave your own experiences or any other tips in the comments below. Don't forget to like, subscribe, and I'll see you in the next vlog! You've got this! 🙌&lt;/p&gt;

&lt;p&gt;Cheers!&lt;/p&gt;

</description>
      <category>career</category>
      <category>mentalhealth</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Forgotten passwords? Not with my foolproof trick: the art of personalized security</title>
      <dc:creator>JEstebanDev</dc:creator>
      <pubDate>Wed, 05 Jul 2023 02:01:19 +0000</pubDate>
      <link>https://dev.to/jestebandev/forgotten-passwords-not-with-my-foolproof-trick-the-art-of-personalized-security-144k</link>
      <guid>https://dev.to/jestebandev/forgotten-passwords-not-with-my-foolproof-trick-the-art-of-personalized-security-144k</guid>
      <description>&lt;p&gt;Two years ago, I discovered an ingenious trick to solve my constant problem of memorizing passwords, which I want to share with all of you in this short blog. 🎉&lt;/p&gt;

&lt;p&gt;Going back two years, tired of forgetting my passwords, I decided to create a security pattern. At the time, I didn't give it much thought and simply mixed parts of my name, my favorite number, and some special characters. And voilà💡! I had my personalized password. But that wasn't all. Over time, my security pattern evolved and improved to become even more powerful. And now, I am here to share all my secrets with you. 🤫💪&lt;/p&gt;

&lt;p&gt;I am conscious of the existence of more robust security protocols, including the implementation of two-factor authentication. Do you know how it works? First, you enter your password and then you get a code on your smartphone📱🔐. Then you have to enter that code to be able to access the site. There are also more modern systems, such as facial recognition or fingerprints🙌🔒.&lt;/p&gt;

&lt;p&gt;The challenge lies in the fact that these methods are highly advanced, and their implementation is not yet widespread across all websites. This is where my security pattern shines✨. And the best part is that it's super simple to use. Alright, let me break it down for you in a way that sticks, so you'll always remember how to use it when you're coming up with your passwords😎.&lt;/p&gt;

&lt;p&gt;It is an algorithm that uses certain personal data such as name, year of birth, or favorite color. I'll give you an example to help you understand it better. Most sites require a password of at least 8 characters that includes a number and a special character, such as (). From this rule, all you have to do is to generate a password that you don't repeat on different websites, and with that, you will get a much higher level of security 🔒!&lt;/p&gt;

&lt;p&gt;Here is a practical example:&lt;br&gt;
😊 Name: John&lt;br&gt;
🌈 Favorite color: Blue (we'll take the vowels AU)&lt;br&gt;
🐾 Pet name: Felix (we'll take the consonants FLX)&lt;br&gt;
🎂 Year of birth: 1989&lt;/p&gt;

&lt;p&gt;Using this data and adding two random special characters, such as: "&lt;em&gt;!" you will get your security pattern🪄. An example could be John&lt;/em&gt;!AUFLX89, 89AUJohnFLX*!, FLX89AU*!John, and so on.&lt;/p&gt;

&lt;p&gt;Besides that, if you add a zero, either at the beginning or at the end you can have a count of passwords for different accounts on the same website like Gmail, Facebook, etc🔄.&lt;/p&gt;

&lt;p&gt;What do you think? It is an easy-to-remember method and it assures you better protection for your online accounts. Besides that, I have a surprise for you! I've recently created a Chrome extension that allows you to have custom patterns to protect your accounts. You should definitely check it out😉! &lt;a href="https://chrome.google.com/webstore/detail/keycrypt/gehnipclpbcgohaebleeofgpekmggenj" rel="noopener noreferrer"&gt;KeyCrypt Chrome Extension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're curious about checking out the code or learning how I built this amazing extension, I've got you covered, go and check out my repository on GitHub. &lt;a href="https://github.com/JEstebanDev/KeyCrypt" rel="noopener noreferrer"&gt;KeyCrypt Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feel free to explore and provide any feedback you may have.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
