<?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: DowarDev</title>
    <description>The latest articles on DEV Community by DowarDev (@dowardev).</description>
    <link>https://dev.to/dowardev</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%2F288349%2F6905ced3-a35d-47f4-83f1-1fb616bbd5b4.jpg</url>
      <title>DEV Community: DowarDev</title>
      <link>https://dev.to/dowardev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dowardev"/>
    <language>en</language>
    <item>
      <title>Mejora tu productividad automatizando tareas en Visual Studio Code</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Sun, 15 Dec 2024 21:16:58 +0000</pubDate>
      <link>https://dev.to/dowardev/mejora-tu-productividad-automatizando-tareas-en-visual-studio-code-15g6</link>
      <guid>https://dev.to/dowardev/mejora-tu-productividad-automatizando-tareas-en-visual-studio-code-15g6</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Visual Studio Code(VSCode) cuenta con una función que nos permitirá mejorar nuestra productividad y así enfocarnos en programar.&lt;/p&gt;

&lt;p&gt;Al configurar tu entorno de desarrollo, puedes crear comandos personalizados que ejecuten múltiples tareas de forma secuencial. Por ejemplo, puedes definir un comando que inicie automáticamente el servidor de tu proyecto al abrirlo en VSCode. Del mismo modo, puedes crear un comando que ejecute las pruebas, genere el paquete de despliegue y lo suba a producción en un solo paso.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Este tutorial te guiará a través de los conceptos básicos y te preparará para profundizar en la documentación oficial.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Preparación
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Abrimos nuestro proyecto con VSCode.&lt;/li&gt;
&lt;li&gt;En la raíz del proyecto buscamos el directorio(oculto) &lt;code&gt;.vscode&lt;/code&gt;(si no existe lo creamos).&lt;/li&gt;
&lt;li&gt;Dentro del mismo creamos(si no existe) un archivo bajo el nombre de &lt;code&gt;tasks.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Tipo de tarea
&lt;/h3&gt;

&lt;p&gt;Existen dos tipos de tareas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tarea simple:&lt;/strong&gt; Solo ejecuta una única acción, ejemplo: iniciar servidor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tarea compuesta:&lt;/strong&gt; Ejecuta más de una acción, ejemplo: Iniciar tests, realizar build y hacer deploy.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Estructura
&lt;/h3&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;"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;"2.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;"tasks"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"nombre de la tarea"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;"typescript"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"comando a ejecutar"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"argumento1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"argumento2"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="nl"&gt;"group"&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;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"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;"isDefault"&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;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Descripción de la tarea"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"presentation"&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;"echo"&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="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;opcional&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reveal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
        &lt;/span&gt;&lt;span class="nl"&gt;"focus"&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;"panel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shared"&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;"runOptions"&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;"runOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"folderOpen"&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;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;ul&gt;
&lt;li&gt;
&lt;strong&gt;label&lt;/strong&gt;: Nombre de la tarea.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;type&lt;/strong&gt;: Tipo de tarea (&lt;code&gt;shell&lt;/code&gt;, &lt;code&gt;process&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;gulp&lt;/code&gt;, &lt;code&gt;grunt&lt;/code&gt;, &lt;code&gt;typescript&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;command&lt;/strong&gt;: Comando a ejecutar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;args&lt;/strong&gt;: Argumentos para el comando (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;group&lt;/strong&gt;: Agrupación de la tarea (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;kind&lt;/strong&gt;: Tipo de grupo (&lt;code&gt;build&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;none&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;isDefault&lt;/strong&gt;: Si es la tarea predeterminada del grupo (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;problemMatcher&lt;/strong&gt;: Configuración para detectar problemas en la salida del comando (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;detail&lt;/strong&gt;: Descripción de la tarea (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;presentation&lt;/strong&gt;: Configuración de presentación de la tarea (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;echo&lt;/strong&gt;: Si se debe mostrar el comando en la salida (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reveal&lt;/strong&gt;: Cuándo mostrar la salida (&lt;code&gt;always&lt;/code&gt;, &lt;code&gt;silent&lt;/code&gt;, &lt;code&gt;never&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;focus&lt;/strong&gt;: Si se debe enfocar la salida (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;panel&lt;/strong&gt;: Panel de salida (&lt;code&gt;shared&lt;/code&gt;, &lt;code&gt;dedicated&lt;/code&gt;, &lt;code&gt;new&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;runOptions&lt;/strong&gt;: Opciones de ejecución de la tarea (opcional).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;runOn&lt;/strong&gt;: Cuándo ejecutar la tarea (&lt;code&gt;folderOpen&lt;/code&gt;, &lt;code&gt;default&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ejemplos
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Tarea simple
&lt;/h4&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;"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;"2.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;"tasks"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ionic 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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ionic serve --external"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"group"&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;"kind"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"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;"isDefault"&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;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para iniciar el servidor de desarrollo de Ionic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"presentation"&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;"echo"&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;"reveal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"focus"&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;"panel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shared"&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;"runOptions"&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;"runOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"folderOpen"&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;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;El ejemplo anterior inicia el servidor para un proyecto de Ionic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Tarea compuesta
&lt;/h4&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;"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;"2.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;"tasks"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Run Tests"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run 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;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para ejecutar los tests de la aplicación"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build 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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npm run 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;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para construir la aplicación"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deploy via SSH"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"shell"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"scp -r ./dist/* user@remote:/path/to/deploy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para mandar los archivos por SSH"&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Full Deploy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dependsOn"&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="s2"&gt;"Run Tests"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build App"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deploy via SSH"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para ejecutar tests, construir y desplegar la aplicación"&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;p&gt;Con esto se logrará ejecutar los tests, el build y finalmente el deploy usando &lt;code&gt;Full Deploy&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejecución
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tarea simple
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Iniciamos la paleta de comandos(&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Ingresamos &lt;code&gt;Run Task&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Seleccionamos la tarea de nuestra preferencia(nombre asignado en &lt;code&gt;label&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Gracias a la propiedad &lt;code&gt;runOn&lt;/code&gt; con el valor asignado &lt;code&gt;folderOpen&lt;/code&gt; en el ejemplo de la tarea simple no sera necesario ejecutarla mediante la paleta de comandos ya que tener esta propiedad definida le indica que debe ejecutarse tan pronto se inice el proyecto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Tarea compuesta
&lt;/h3&gt;

&lt;p&gt;Si se analiza detenidamente se podrá observar que el ejemplo de la tarea simple y compuesta comparten varias similitudes en su estructura, exceptuando por lo siguiente:&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;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Full Deploy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dependsOn"&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="s2"&gt;"Run Tests"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build App"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deploy via SSH"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"problemMatcher"&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;"detail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tarea para ejecutar tests, construir y desplegar la aplicación"&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;Lo que nos permite este fragmento es ejecutar varias tareas usando un único comando bajo el nombre definido en label(&lt;code&gt;Full Deploy&lt;/code&gt;), esto lo hace gracias a la propiedad &lt;code&gt;dependsOn&lt;/code&gt; en donde se pasa como argumento el nombre de las tareas que ejecutara. De ser requerido se podrá ejecutar las tareas de forma individual usando el nombre definido en el label, en este caso: &lt;code&gt;Run Tests&lt;/code&gt;, &lt;code&gt;Build App&lt;/code&gt;, &lt;code&gt;Deploy via SSH&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Si una tarea falla la siguiente no se ejecutara a no ser que especifiquemos la propiedad &lt;code&gt;dependsOrder&lt;/code&gt; en &lt;code&gt;sequence&lt;/code&gt; o &lt;code&gt;parallel&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para ejecutar la tarea compuesta se hace de la misma forma que una tarea simple&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abrimos la paleta de comandos(&lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;P&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Ingresamos &lt;code&gt;Run Task&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;Seleccionamos la tarea de nuestra preferencia(en esta caso &lt;code&gt;Full Deploy&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Resumen
&lt;/h2&gt;

&lt;p&gt;Hagamos un resumen rápido&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creamos un &lt;code&gt;tasks.json en&lt;/code&gt;.vscode`&lt;/li&gt;
&lt;li&gt;Definimos las tareas que usaremos en nuestro proyecto&lt;/li&gt;
&lt;li&gt;Ejecutamos &lt;code&gt;Ctrl&lt;/code&gt;+&lt;code&gt;Shift&lt;/code&gt;+&lt;code&gt;P&lt;/code&gt; y en la paleta de comandos ingresamos &lt;code&gt;Run Task&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Seleccionamos la tarea deseada.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Post original: &lt;a href="https://dowar.xyz/blog/post/55" rel="noopener noreferrer"&gt;https://dowar.xyz/blog/post/55&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>vscode</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Domina el arte de la personalización en Ionic: Crea paletas de colores únicas paso a paso</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Tue, 03 Dec 2024 21:10:51 +0000</pubDate>
      <link>https://dev.to/dowardev/domina-el-arte-de-la-personalizacion-en-ionic-crea-paletas-de-colores-unicas-paso-a-paso-3lfj</link>
      <guid>https://dev.to/dowardev/domina-el-arte-de-la-personalizacion-en-ionic-crea-paletas-de-colores-unicas-paso-a-paso-3lfj</guid>
      <description>&lt;p&gt;Ionic nos brinda la oportunidad de conferir un toque distintivo a nuestras aplicaciones mediante la creación de paletas de colores personalizadas. Gracias a una herramienta integrada, podemos adaptar nuestros componentes visuales a nuestros gustos y necesidades específicas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crear color
&lt;/h2&gt;

&lt;p&gt;Para comenzar este proceso, dirigiremos nuestra atención a la documentación oficial de Ionic. En ella, encontraremos una utilidad diseñada específicamente para generar colores personalizados. Su uso es sumamente sencillo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p8c74i1zjflucq28xvc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9p8c74i1zjflucq28xvc.png" alt="preview ionic tool" width="800" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nombre&lt;/strong&gt;: Asigna un nombre al color que servirá como identificador en nuestro código.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color:&lt;/strong&gt; Especifica el tono exacto que deseamos emplear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resultado:&lt;/strong&gt; Reglas CSS&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Instalación
&lt;/h2&gt;

&lt;p&gt;Ionic nos proporciona un archivo denominado &lt;code&gt;variables.css&lt;/code&gt; con la finalidad de albergar las reglas de estilo que se aplicarán a toda la aplicación. En este archivo, añadiremos las propiedades CSS correspondientes al color que hemos creado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;#69bb7b&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new-rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;105&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;187&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new-contrast&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;#000000&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new-contrast-rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new-shade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;#5ca56c&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-new-tint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="m"&gt;#78c288&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.ion-color-new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-base-rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new-rgb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-contrast&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new-contrast&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-contrast-rgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new-contrast-rgb&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-shade&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new-shade&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="py"&gt;--ion-color-tint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--ion-color-new-tint&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;
  
  
  Aplicar color
&lt;/h2&gt;

&lt;p&gt;Una vez que hemos definido nuestros colores personalizados, podemos aplicarlos a los componentes de Ionic de manera intuitiva. El proceso es similar al utilizado para los colores predefinidos del framework.&lt;/p&gt;

&lt;p&gt;Por ejemplo, para cambiar el color de un botón, simplemente añadiremos el atributo &lt;code&gt;color&lt;/code&gt; con el nombre del color personalizado que hemos creado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ion-button&lt;/span&gt; &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"new"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hola mundo&lt;span class="nt"&gt;&amp;lt;/ion-button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;¡Has llegado al final de este tutorial y ahora eres un experto en personalizar los colores en Ionic! Con esta guía, podrás crear aplicaciones únicas y atractivas que reflejen tu estilo personal. Recuerda que la elección de los colores adecuados es fundamental para transmitir emociones y crear una experiencia de usuario memorable. ¡Anímate a experimentar y comparte tus creaciones con la comunidad Ionic!&lt;/p&gt;

&lt;p&gt;Fuente: &lt;a href="https://dowar.xyz/blog/post/54" rel="noopener noreferrer"&gt;https://dowar.xyz/blog/post/54&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ionic</category>
      <category>uidesign</category>
      <category>spanish</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Enviar correos electrónicos con Mailtrap y Laravel</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Thu, 07 Nov 2024 07:15:40 +0000</pubDate>
      <link>https://dev.to/dowardev/enviar-correos-electronicos-y-pruebas-con-mailtrap-laravel-5b38</link>
      <guid>https://dev.to/dowardev/enviar-correos-electronicos-y-pruebas-con-mailtrap-laravel-5b38</guid>
      <description>&lt;p&gt;Uno de los principales usos que se suele dar al backend es el de enviar correos electrónicos, ya sea para que el usuario pueda autenticar su sesión o incluso recibir notificaciones sobre nuevo contenido, entre otras muchas razones, con este tutorial aprenderás a realizar pruebas de correo electrónico empleando Mailtrap para posteriormente utilizar un servicio para enviar correos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requerimientos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Contar con una cuenta creada en &lt;a href="mailtrap.io"&gt;mailtrap.io&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Proyecto de Laravel versión 7 en adelante.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mailtrap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Qué es Mailtrap?
&lt;/h3&gt;

&lt;p&gt;Básicamente, es un servicio que nos permite realizar pruebas de correo electrónico, además de ofrecernos otras herramientas que nos permitirán optimizar los mismos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credenciales y configuraciones
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdowar-blog.dowar.xyz%2Fapi%2Fget-image-posts%3Fname%3D63d77249c9cf41675063881.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdowar-blog.dowar.xyz%2Fapi%2Fget-image-posts%3Fname%3D63d77249c9cf41675063881.webp" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cuando accedemos a nuestra cuenta por primera vez podremos observar que contamos con un &lt;code&gt;inbox&lt;/code&gt; creado por defecto, según nuestras necesidades podremos crear más e incluso organízalos creando proyectos.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Qué es un inbox?&lt;br&gt;&lt;br&gt;
Un inbox es una bandeja de entrada donde podremos gestionar nuestros correos, además de encontrar herramientas que nos permitirán mejorar los mismos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si accedemos a nuestro inbox nos encontraremos del lado izquierdo una lista de los correos que hemos recibido y por el otro las configuraciones para una multitud de integraciones.&lt;br&gt;&lt;br&gt;
Desplegamos el dropdown y seleccionamos Laravel para posteriormente copiar la configuración.&lt;/p&gt;

&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdowar-blog.dowar.xyz%2Fapi%2Fget-image-posts%3Fname%3D63d772627939a1675063906.webp" width="800" height="400"&gt;
&lt;h2&gt;
  
  
  Laravel
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Credenciales y configuraciones
&lt;/h3&gt;

&lt;p&gt;Ahora toca dirigirnos a nuestro proyecto de Laravel y abrir nuestro archivo de configuración &lt;code&gt;.env&lt;/code&gt; donde sustituiremos las siguientes líneas con el contenido que copiamos en el paso anterior.&lt;/p&gt;

&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdowar-blog.dowar.xyz%2Fapi%2Fget-image-posts%3Fname%3D63d7727d3b5dc1675063933.webp" width="800" height="400"&gt;

&lt;p&gt;Con esto ya tendríamos aplicada la configuración necesaria para que Laravel se conecte a los servicios de Mailtrap.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;&lt;br&gt;
Cuando ya estés por subir tu proyecto a producción deberás sustituir la configuración de Mailtrap por la de tu servicio de correo electrónico.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Ejemplo
&lt;/h3&gt;

&lt;p&gt;En esta prueba crearemos un pequeño formulario de contacto el cual enviaremos por correo electrónico.&lt;/p&gt;
&lt;h4&gt;
  
  
  Creación de formulario
&lt;/h4&gt;

&lt;p&gt;Para crear nuestro formulario nos dirigiremos a una, &lt;code&gt;view&lt;/code&gt; en mi caso será la que ya viene incluida &lt;code&gt;welcome.blade.php&lt;/code&gt; y agregamos el siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"{{ url('store-form') }}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Nombre&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"subject"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Asunto&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"subject"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Mensaje&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; &lt;span class="na"&gt;rows=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="na"&gt;cols=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Enviar"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sustituimos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;store-form&lt;/strong&gt; por la ruta deseada para enviar nuestro formulario, esta ruta la crearemos en el siguiente paso.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El siguiente código es opcional cuya única función es lograr que el formulario se vea más presentable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"{{ url('store-form') }}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  @csrf
  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex; flex-basis: 70px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Nombre&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex; flex-basis: 70px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"subject"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Asunto&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"subject"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"display: flex; flex-basis: 70px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Mensaje&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="na"&gt;value=&lt;/span&gt;&lt;span class="s"&gt;"Enviar"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Ruta
&lt;/h4&gt;

&lt;p&gt;Una vez contemos con nuestro formulario creado, pasaremos agregar nuestra ruta, la cual será la encargada de entregar el contenido de nuestro formulario a Laravel.&lt;br&gt;&lt;br&gt;
Accedemos a &lt;code&gt;web.php&lt;/code&gt; el cual se encuentra en &lt;code&gt;routes&lt;/code&gt; y agregamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"store-form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Controller&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"sendMail"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y sustituimos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;store-form&lt;/strong&gt; por el nombre de nuestra ruta&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Controller&lt;/strong&gt; por el nombre de nuestro controlador&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sendMail&lt;/strong&gt; por el nombre de la función.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Crear plantilla de correo
&lt;/h4&gt;

&lt;p&gt;Crearemos un directorio con el nombre &lt;code&gt;emails&lt;/code&gt; en la siguiente ruta &lt;code&gt;resources&amp;gt;views&lt;/code&gt; el cual contendrá nuestras plantillas de correo electrónico, estas plantillas son del tipo &lt;code&gt;Blade&lt;/code&gt; lo que significa que podremos usar HTML y PHP en el mismo archivo tal cual como lo haríamos en cualquier otra &lt;code&gt;view&lt;/code&gt; de Laravel.&lt;br&gt;&lt;br&gt;
Agregamos una nueva plantilla con el nombre &lt;code&gt;emailTest&lt;/code&gt; y en ella agregamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;http-equiv=&lt;/span&gt;&lt;span class="s"&gt;"X-UA-Compatible"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"IE=edge"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Este es un mensaje de prueba.&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;P&amp;gt;&lt;/span&gt;
        Nombre: {{ $name }} &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
        Mensaje: {{ $messageContent }}
    &lt;span class="nt"&gt;&amp;lt;/P&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo que se encuentra entre &lt;code&gt;{{}}&lt;/code&gt; son variables de PHP las cuales son proveídas por la función encargada de construir nuestro correo electrónico, esta función la crearemos en el siguiente paso.&lt;/p&gt;

&lt;h4&gt;
  
  
  Agregar nuestra función
&lt;/h4&gt;

&lt;p&gt;En nuestro controlador crearemos una función la cual contendrá el código para enviar nuestro correo electrónico.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;sendMail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Request&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;$subject&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nv"&gt;$messageContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$request&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nv"&gt;$messageData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"to"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"contacto@dowar.xyz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"subject"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$subject&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="nc"&gt;Mail&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;"emails.emailTest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"name"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"messageContent"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$messageContent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;//Parametros&lt;/span&gt;
    &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$messageData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;//Cuerpo del correo&lt;/span&gt;
      &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;to&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$messageData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
      &lt;span class="nv"&gt;$message&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;subject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$messageData&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"subject"&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;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sustituimos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="mailto:contacto@dowar.xyz"&gt;contacto@dowar.xyz&lt;/a&gt;&lt;/strong&gt; por el correo electrónico del destinatario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;emailTest&lt;/strong&gt; por el nombre de nuestra plantilla.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los parámetros son opcionales y estos nos servirían para agregar información a nuestro correo, en este ejemplo se está usando como parámetros el nombre y el mensaje y para usarlos dentro de nuestra plantilla los colocaremos entre &lt;code&gt;{{}}&lt;/code&gt; tal como se mostró en el paso anterior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prueba de funcionamiento
&lt;/h3&gt;

&lt;p&gt;Ahora solamente bastará con llenar el formulario y darle en enviar para posteriormente dirigirnos a nuestro inbox de Mailtrap donde podremos observar nuestro correo electrónico, cuando finalicemos nuestras pruebas bastará con sustituir la configuración de mailtrap que agregamos en el archivo &lt;code&gt;.env&lt;/code&gt; por la de nuestro proveedor de correo electrónico.&lt;/p&gt;

&lt;p&gt;Con esto habremos finalizado este tutorial, pero antes de irme quiero agradecerles por llegar hasta el final y además recordarles que ante cualquier duda pueden contactarme sin ningún problema.&lt;/p&gt;

&lt;p&gt;Artículo de &lt;a href="https://dowar.xyz/blog/post/37" rel="noopener noreferrer"&gt;DowarDev Blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>laravel</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Instalar PNPM en Linux, macOS y Windows</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Wed, 06 Nov 2024 04:55:00 +0000</pubDate>
      <link>https://dev.to/dowardev/instalar-pnpm-en-linux-macos-y-windows-29pm</link>
      <guid>https://dev.to/dowardev/instalar-pnpm-en-linux-macos-y-windows-29pm</guid>
      <description>&lt;p&gt;Como programador web seguramente escuchaste hablar sobre los gestores de dependencias, especialmente sobre NPM, durante mucho tiempo he trabajado con este gestor, pero hace poco le di la oportunidad a &lt;code&gt;PNPM&lt;/code&gt; y valla que me sorprendió.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué elegirlo?
&lt;/h2&gt;

&lt;p&gt;NPM creará un directorio en la raíz de nuestro proyecto donde estará almacenando todas sus dependencias y esto se convierte en un problema si tenemos más de un proyecto en nuestro disco, en cambio, PNPM almacena todas las dependencias en una única ubicación y cuando un proyecto requiere de una de ellas simplemente se referencia a través de un enlace, también nos permitirá ser más eficientes a la hora de crear nuevos proyectos, ya que solamente se descargarán aquellas nuevas dependencias.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalación
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;p&gt;Para los siguientes comandos no es necesario tener instalado Node.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.pnpm.io/install.sh | sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no tenemos instalado curl podemos intentar usando &lt;code&gt;wget&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://get.pnpm.io/install.sh | sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;El siguiente comando lo tendremos que ejecutar usando PowerShell.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;iwr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;https://get.pnpm.io/install.ps1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-useb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;iex&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  macOS
&lt;/h3&gt;

&lt;p&gt;Al igual que en Linux podremos hacer uso de los siguientes comandos y sin requerir Node.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.pnpm.io/install.sh | sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si no tenemos instalado curl podemos intentar usando &lt;code&gt;wget&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://get.pnpm.io/install.sh | sh -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También podremos hacer uso del gestor de paquetes &lt;code&gt;Homebrew&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pnpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Linux, macOS y Windows
&lt;/h3&gt;

&lt;p&gt;Si contamos con &lt;code&gt;Node.js&lt;/code&gt; instalado en nuestro sistema entonces podremos activar PNPM usando una herramienta que este nos provee, de lo contrario te comparto un &lt;a href="https://dowar.xyz/blog/post/15" rel="noopener noreferrer"&gt;post&lt;/a&gt; donde detallo como instarlo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;corepack &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;corepack prepare pnpm@&amp;lt;version&amp;gt; &lt;span class="nt"&gt;--activate&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Artículo original &lt;a href="https://dowar.xyz/blog/post/21" rel="noopener noreferrer"&gt;dowar.xyz&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>node</category>
      <category>tutorial</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Instalar NodeJS en Linux y Windows</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Tue, 05 Nov 2024 20:23:13 +0000</pubDate>
      <link>https://dev.to/dowardev/instalar-nodejs-en-linux-y-windows-4iip</link>
      <guid>https://dev.to/dowardev/instalar-nodejs-en-linux-y-windows-4iip</guid>
      <description>&lt;p&gt;Para poder hacer uso de NPM tendremos que instalar Node.js preferentemente la versión LTS, esto se recomienda porque las versiones LTS contienen menos errores y minimizando así los dolores de cabeza.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linux
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Usando gestor de paquetes
&lt;/h3&gt;

&lt;p&gt;Para instalarlo en Linux podremos hacerlo ya sea usando el gestor de paquetes de nuestra distribución o usando NVM(node version manager)&lt;/p&gt;

&lt;h3&gt;
  
  
  Gestor de paquetes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Debian y Ubuntu
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://deb.nodesource.com/setup_lts.x | &lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; bash -
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Arch Linux
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; nodejs npm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;openSUSE
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;zypper &lt;span class="nb"&gt;install &lt;/span&gt;nodejs16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Reemplaza 16 con la versión deseada (14, 18, etc.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Fedora
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install &lt;/span&gt;nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
En sistemas del tipo rolling release siempre se instalara la utlima version dispible en los repositorios&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Usando un manejador de versiones
&lt;/h3&gt;

&lt;p&gt;NVM es un gestor de versiones para Node.js el cual nos facilitara la instalación y manejo de las versiones de Node.js en nuestra distribución y su instalación es muy sencilla.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Los siguientes comandos dependerán del intérprete de comandos que estemos utilizando en nuestro sistema.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Bash
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/nvm"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Fish
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sL&lt;/span&gt; https://git.io/fisher | &lt;span class="nb"&gt;source&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; fisher &lt;span class="nb"&gt;install &lt;/span&gt;jorgebucaran/fisher
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;fisher &lt;span class="nb"&gt;install &lt;/span&gt;jorgebucaran/nvm.fish
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El primer comando nos instalará "Fisher" el cual nos permitirá dotar de funcionalidades a "Fish" mediante el uso de plug-ins, y el segundo comando nos instalará el plug-in que permitirá a Fish ser compatible con NVM.&lt;/p&gt;

&lt;p&gt;Una vez tengamos instalado NVM ya podremos pasar a instalar Node.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este comando instalará la versión LTS, si deseas instalar otra versión simplemente modificar el comando de la siguiente forma, por ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install &lt;/span&gt;14.7.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Windows
&lt;/h2&gt;

&lt;p&gt;Para la instalación en Windows podemos emplear el gestor de paquetes "Chocolatey" o usar el instalador que se encuentra en su &lt;a href="https://nodejs.org/es/download/" rel="noopener noreferrer"&gt;página oficial&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;choco &lt;span class="nb"&gt;install &lt;/span&gt;nodejs-lts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Para poder hacer uso de este comando es necesario que tengas instalado este gestor de paquetes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Con esto ya tendremos instalado NPM y Node.js en nuestro sistema operativo, ante cualquier inconveniente no dudes en contactarme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Artículo extraído de
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dowar.xyz/blog/post/15" rel="noopener noreferrer"&gt;https://dowar.xyz/blog/post/15&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>node</category>
      <category>npm</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Herramientas de Vue 3</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Mon, 26 Jun 2023 14:50:39 +0000</pubDate>
      <link>https://dev.to/dowardev/herramientas-de-vue-3-2ehn</link>
      <guid>https://dev.to/dowardev/herramientas-de-vue-3-2ehn</guid>
      <description>&lt;p&gt;Esta sería la primera sección de esta serie donde compartiré aquellas Herramientas que han hecho mi vida más fácil y que espero que a ustedes también.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>vue</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Diario de Vue 3</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Mon, 26 Jun 2023 14:48:45 +0000</pubDate>
      <link>https://dev.to/dowardev/diario-de-vue-3-4nfb</link>
      <guid>https://dev.to/dowardev/diario-de-vue-3-4nfb</guid>
      <description>&lt;p&gt;A lo largo de mis 5 años de experiencia he tenido la oportunidad de conocer y probar muchas herramientas que han sido de gran utilidad, por esta razón decidí empezar con esta serie donde compartiré mi conocimiento adquirido de este maravilloso framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contenido
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/dowar/herramientas-de-vue-3-2ehn"&gt;Herramientas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/dowar/curso-de-vue-3-3ila"&gt;Curso&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spanish</category>
      <category>vue</category>
      <category>webdev</category>
    </item>
    <item>
      <title>LifeLine #2 (v0.9.0)</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Mon, 26 Jun 2023 07:56:00 +0000</pubDate>
      <link>https://dev.to/dowardev/lifeline-2-v090-dan</link>
      <guid>https://dev.to/dowardev/lifeline-2-v090-dan</guid>
      <description>&lt;p&gt;Estoy emocionado porque cada vez se está más cerca de lanzar la primera versión estable, la cual incluiría lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gestor de eventos y tareas&lt;/li&gt;
&lt;li&gt;Sincronización de eventos y tareas en todos los dispositivos en donde se inicie sesión.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para esta versión(0.9.0) ya se encuentra funcionando la sincronización de eventos, además de que se estrena un nuevo diseño minimalista y centrado en la funcionalidad.&lt;br&gt;
Para la siguiente versión se espera tener lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sincronización de tareas&lt;/li&gt;
&lt;li&gt;Crear listas de tareas&lt;/li&gt;
&lt;li&gt;Crear múltiples calendarios&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos cambios ya se encuentran en la rama principal del repositorio, al igual que el sitio web, la aplicación ha estado disponible solamente para testers, pero desde esta versión ya estará disponible como primera versión disponible para el público general, tan pronto como sea verificada por la tienda, actualizaré el link de este post además de que será compartido por las redes sociales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enlaces de interés
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lifeline.dowar.xyz/" rel="noopener noreferrer"&gt;Sitio web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gonzam4/lifeline" rel="noopener noreferrer"&gt;Repositorio FrontEnd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/gonzam4/lifeline-backend" rel="noopener noreferrer"&gt;Repositorio Backend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mastodon.social/@dowardev" rel="noopener noreferrer"&gt;Perfil de Mastodon(DowarDev)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/company/dowardev/" rel="noopener noreferrer"&gt;Página de LinkedIn(DowarDev)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>development</category>
      <category>blog</category>
    </item>
    <item>
      <title>Instalación y conceptos iniciales</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Mon, 19 Jun 2023 13:16:43 +0000</pubDate>
      <link>https://dev.to/dowardev/instalacion-y-conceptos-iniciales-3iod</link>
      <guid>https://dev.to/dowardev/instalacion-y-conceptos-iniciales-3iod</guid>
      <description>&lt;p&gt;Bienvenidos al primer capítulo de este curso con el que iniciaremos aprendiendo a como generar un proyecto, conceptos básicos y la estructura del mismo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Para generar un proyecto de Vue es necesario que contentos con &lt;code&gt;gestor de dependencias para javascript&lt;/code&gt; tales como NPM, yarn o PNPM siendo mi recomendación este último del cual dispongo un &lt;a href="https://dowar.xyz/blog/post/21" rel="noopener noreferrer"&gt;post&lt;/a&gt; donde explico como instalarlo.&lt;/li&gt;
&lt;li&gt;Como recomendación personal recomiendo tener instalada alguna extensión en nuestro editor que funcione como &lt;code&gt;lsp&lt;/code&gt; de Vue tal como &lt;code&gt;volar&lt;/code&gt;, ya que esta nos proporcionará varias funciones tales como

&lt;ul&gt;
&lt;li&gt;Detección de errores.&lt;/li&gt;
&lt;li&gt;Navegación entre componentes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
El gestor de paquetes que estare usando sera &lt;code&gt;pnpm&lt;/code&gt; y los comandos que se indiquen a lo largo de este curso puede variar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Creación del proyecto
&lt;/h2&gt;

&lt;p&gt;Accedemos a nuestra terminal y con nuestro gestor de paquetes ejecutamos&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm create vue
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto se nos proporcionará un pequeño cuestionario que nos permitirá adaptar el proyecto a nuestras necesidades&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Project name: … &amp;lt;your-project-name&amp;gt;
Add TypeScript? … No / Yes
Add JSX Support? … No / Yes
Add Vue Router &lt;span class="k"&gt;for &lt;/span&gt;Single Page Application development? … No / Yes
Add Pinia &lt;span class="k"&gt;for &lt;/span&gt;state management? … No / Yes
Add Vitest &lt;span class="k"&gt;for &lt;/span&gt;Unit testing? … No / Yes
Add an End-to-End Testing Solution? … No / Cypress / Playwright
Add ESLint &lt;span class="k"&gt;for &lt;/span&gt;code quality? … No / Yes
Add Prettier &lt;span class="k"&gt;for &lt;/span&gt;code formatting? … No / Yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por el momento no te abrumes con el significado de estas, ya que lo iremos aprendiendo a lo largo del curso.&lt;/p&gt;

&lt;p&gt;Accedemos al directorio de nuestro proyecto e instalamos las dependencias&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="nb"&gt;cd&lt;/span&gt; &amp;lt;nombre del proyecto&amp;gt;
pnpm i
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Estructura
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota&lt;br&gt;
Dependiendo de lo que respondiste en el cuestionario anterior podría variar la estructura existiendo mas o menos directorios/ficheros.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Index.html&lt;/strong&gt; Para el que no lo sepa Vue funciona bajo la estructura de un SPA, aunque se puede trabajar de la forma tradicional, está pensado para funcionar como una SPA y es aquí donde colocaremos toda información relacionada con nuestro sitio web como el nombre, icono(el que aparece en la pestaña), lenguaje en el que está desarrollado, entre otras cosas.
Este lo podremos encontrar en la raíz de nuestro proyecto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;package.json&lt;/strong&gt; En él podremos encontrar una lista con todos los paquetes necesarios para el funcionamiento de nuestro proyecto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;public/&lt;/strong&gt; En él colocaremos aquellos assets que no requieran procesamiento, por ejemplo el icono del sitio web.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tsconfig&lt;/strong&gt; Aquí colocaremos toda la configuración referente a TypeScript en el caso de que en el cuestionario seleccionemos la integración del mismo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vite.config&lt;/strong&gt; Los plugins y configuraciones referentes a Vite las colocaremos aquí.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/&lt;/strong&gt; Este es el directorio donde pasaremos la mayor cantidad de tiempo, ya que es aquí donde colocaremos los assets, vistas, componentes, rutas, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/assets&lt;/strong&gt; Los assets son básicamente todos los ficheros requeridos por nuestro proyecto como imágenes, videos, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/components&lt;/strong&gt; La forma de funcionar de este tipo de frameworks es bajo el uso de componentes, los cuales son piezas de código que podremos reutilizar dentro de nuestras vistas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/views&lt;/strong&gt; Las vistas es lo equivalente a las páginas que podremos encontrar en cualquier otro sitio elaborado con HTML.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/router/index&lt;/strong&gt; En un punto anterior mencioné que Vue puede trabajar como un SPA y esto se logra gracias al router, ya que este contiene todas las rutas de nuestro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/App.vue&lt;/strong&gt; Este es el componente raíz el cual se encarga de cargar elementos como &lt;code&gt;routerview&lt;/code&gt; que es donde se renderizan nuestras vistas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;src/main&lt;/strong&gt; Aquí podremos encontrar la lógica de nuestro proyecto Vue porque podremos encontrar el archivo CSS, la importación del App.vue y el router, entre otras cosas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conceptos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SPA&lt;/strong&gt; Una &lt;code&gt;Single Page Aplication&lt;/code&gt; es definido como una aplicación de una sola página, como vimos anteriormente podremos encontrar un &lt;code&gt;index.html&lt;/code&gt; y un &lt;code&gt;App.vue&lt;/code&gt;, cuando accedemos a una ruta de nuestro &lt;code&gt;router&lt;/code&gt; esta nos redirigirá a la vista correspondiente(view) la cual será renderizada en un el App.vue y posteriormente este mismo en el index.html, a este tipo de aplicaciones se les conoce de esta forma, ya que todo se renderiza dentro del mismo archivo &lt;code&gt;html&lt;/code&gt; en lugar de tener varios como un sitio web convencional.&lt;br&gt;
Para más información visitar el siguiente &lt;a href="https://www.youtube.com/watch?v=Fr5QGdJZBVo&amp;amp;ab_channel=KikoPalomares" rel="noopener noreferrer"&gt;video&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ruta&lt;/strong&gt; Las rutas son el equivalente a las direcciones web, las cuales hacen referencia a los diferentes archivos HTML de nuestro sitio web, pero en este caso referencian a nuestras vistas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vite&lt;/strong&gt; es herramienta de compilación que fue creada por el mismo desarrollador de Vue, antes de la existencia de este se usaba &lt;code&gt;webpack&lt;/code&gt;, básicamente este prepara nuestro proyecto para poder ser alojado en un hosting.
&lt;strong&gt;TypeScript&lt;/strong&gt; básicamente es un JavaScript mejorado, ya que añade funciones como el tipado el uso de interface, entre otras cosas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final
&lt;/h2&gt;

&lt;p&gt;Trate de ser lo más claro y conciso posible, cualquier duda o aclaración siéntete libre de contactarme, nos vemos en un siguiente post.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>vue</category>
    </item>
    <item>
      <title>Curso de Vue 3</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Mon, 19 Jun 2023 13:10:44 +0000</pubDate>
      <link>https://dev.to/dowardev/curso-de-vue-3-3ila</link>
      <guid>https://dev.to/dowardev/curso-de-vue-3-3ila</guid>
      <description>&lt;p&gt;Vue es uno de los frameworks JavaScript más famosos de la actualidad, &lt;br&gt;
este framework es recomendado para aquellos que tienen poca o nula &lt;br&gt;
experiencia manejando este tipo de herramientas, ya que su curva de &lt;br&gt;
aprendizaje es muy baja en comparación con React o Angular, pero no te &lt;br&gt;
confundas por el hecho de que el que sea fácil no quiere decir que no &lt;br&gt;
sea potente, pues todo lo contrario pues este se adapta a todo tipo de &lt;br&gt;
necesidades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Requerimientos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Conocimientos básicos en HTML, CSS y JavaScript&lt;/li&gt;
&lt;li&gt;Conocimiento básico en TypeScript(opcional)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dinámica
&lt;/h2&gt;

&lt;p&gt;Primero empezaremos aprendiendo lo básico e iremos subiendo de nivel progresivamente para al final terminar aplicándolo en un proyecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Índice de contenido
&lt;/h2&gt;

&lt;p&gt;Conforme se vayan creando los capítulos del curso iré actualizando este índice para que sea más fácil para ustedes el tener a mano todo lo aprendido a lo largo de este curso.&lt;/p&gt;

&lt;p&gt;Sin más que decir me despido y los espero en el primer capítulo de este curso.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>vue</category>
    </item>
    <item>
      <title>LifeLine Blog #1</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Thu, 15 Jun 2023 15:53:28 +0000</pubDate>
      <link>https://dev.to/dowardev/lifeline-blog-1-5c6g</link>
      <guid>https://dev.to/dowardev/lifeline-blog-1-5c6g</guid>
      <description>&lt;h2&gt;
  
  
  Razón de su existencia
&lt;/h2&gt;

&lt;p&gt;Siempre he sido una persona que le da bastante prioridad a su tiempo y trata en lo máximo posible usarlo en cosas productivas, por esta razón llevo ya un tiempo buscando una aplicación que me permita ser más eficiente con el mismo, pero ya me canse de esperar, fue cuando un día desperté por la mañana y me dije a mí mismo eres programador ya es hora de que plasmes eso que tienes en la mente en código y a su vez en algo funcional y quizá con esto también ayudes a otras personas que podrían tener el mismo problema que tú.&lt;/p&gt;

&lt;h2&gt;
  
  
  El mercado
&lt;/h2&gt;

&lt;p&gt;Las aplicaciones que existen actualmente en el mercado no me cumplen en su totalidad lo que yo necesitaba, ya que simplemente se limitan a ofrecerte ya sea un calendario o un gestor de tareas y era raro aquella que te ofrecía ambas, pero yo necesitaba más, yo quería algo que me permitiera analizar mi día a día más allá de solamente organizarlo y con esto poder tomar acción sobre el mismo, sé que por el momento puede ser algo difícil entender lo que trato de explicar en esta primera entrada del blog, pero cuando puedan analizar por su cuenta la aplicación quizá entiendan mejor todo esto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avances
&lt;/h2&gt;

&lt;p&gt;A la fecha en la que se publica esta entrada los avances no son muy significativos, por lo tanto, no sirven como ejemplo para todo lo que trato de expresar en mis anteriores palabras, lo que podrán observar si acceden al &lt;a href="https://lifeline.dowar.xyz" rel="noopener noreferrer"&gt;sitio web&lt;/a&gt; es lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calendario semanal.&lt;/li&gt;
&lt;li&gt;Gestor de tareas con dos vistas.

&lt;ul&gt;
&lt;li&gt;Clásico(checklist).&lt;/li&gt;
&lt;li&gt;Kanban,&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Integración con wakatime(por el momento solo mostrar total del día).&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Que sigue?
&lt;/h2&gt;

&lt;p&gt;Antes de continuar con nuevas funciones necesito pulir lo poco que mencione en el punto anterior, pero después de eso quiero agregar lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integración con otros servicios como Todoist, Google calendar, Google fit, etc.&lt;/li&gt;
&lt;li&gt;Un gestor de extensiones con el cual puedas tener solamente aquello que desees utilizar de la aplicación y así evitar que esta tenga un tamaño excesivo e innecesario.&lt;/li&gt;
&lt;li&gt;Una línea de tiempo de todas las actividades que realizas, para lograr esto se usara lo siguiente:

&lt;ul&gt;
&lt;li&gt;Extensión de navegador que analizara las páginas que visitas y el tiempo que permaneces en ellas.&lt;/li&gt;
&lt;li&gt;Extensión de la aplicación móvil/escritorio realizará lo mismo que la extensión del nevegador solamente que en tu dispositivo móvil y computadora.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Capacidad para guardar información(documentos) sería algo parecido a un bloc de notas pero con unos cuantos añadidos.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Esto apenas comienza
&lt;/h2&gt;

&lt;p&gt;Sé que se ve como un proyecto demasiado ambicioso y más porque solamente está siendo desarrollado por una única persona, pero a pesar de eso no pasa ni un solo día en el que no esté trabajando en hacer este proyecto realidad.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agradecimientos
&lt;/h2&gt;

&lt;p&gt;Gracias por haber llegado hasta este punto y espero que este proyecto te llega a ser de utilidad.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>development</category>
      <category>blog</category>
    </item>
    <item>
      <title>Media queries in Vuejs</title>
      <dc:creator>DowarDev</dc:creator>
      <pubDate>Fri, 16 Apr 2021 06:03:13 +0000</pubDate>
      <link>https://dev.to/dowardev/media-queries-in-vuejs-4o2b</link>
      <guid>https://dev.to/dowardev/media-queries-in-vuejs-4o2b</guid>
      <description>&lt;p&gt;Vue has become my favorite JavaScript Framework for many reasons, but this time I am not talking about that but about an NPM package that allows you to render certain content from your template depending on the size of the screen.&lt;br&gt;
As FrontEnd developers it is our duty to adapt our web applications to different screen resolutions to offer the best possible experience, that is why while I was developing a website I had the need to change some elements depending on the device with which it was being used accessing.&lt;/p&gt;

&lt;p&gt;Requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vue 3&lt;/li&gt;
&lt;li&gt;NPM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We execute the following command in the terminal&lt;br&gt;
&lt;code&gt;npm install vue3-mq&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To finish its installation and configuration we will go to our main.ts file where we will import the package and add the screen resolutions, in the end it should look similar to the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import { createApp } from "vue";
import VueMq from "vue3-mq";

const app = createApp({});

app.use(VueMq, {
  breakpoints: {
    sm: 450,
    md: 1250,
    lg: Infinity,
  }
})

app.mount('#app');

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

&lt;/div&gt;



&lt;p&gt;We will place the content between the labels&lt;br&gt;
&lt;code&gt; &amp;lt;mq-layout mq="lg"&amp;gt;&amp;lt;/mq-layout&amp;gt;&lt;/code&gt;&lt;br&gt;
where mq is the property where we will indicate the screen resolution for that content to be displayed.&lt;/p&gt;

&lt;p&gt;An example of use would be the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;mq-layout mq="lg"&amp;gt;
  &amp;lt;span&amp;gt; Display on lg &amp;lt;/span&amp;gt;
&amp;lt;/mq-layout&amp;gt;
&amp;lt;mq-layout mq="md+"&amp;gt;
  &amp;lt;span&amp;gt; Display on md and larger &amp;lt;/span&amp;gt;
&amp;lt;/mq-layout&amp;gt;
&amp;lt;mq-layout :mq="['sm', 'lg']" tag="span"&amp;gt;
  Display on sm and lg
&amp;lt;/mq-layout&amp;gt;

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

&lt;/div&gt;



&lt;p&gt;Quite simple truth, with this we have finished and I hope that you also find it useful as it was for me, but I still cannot withdraw without first providing you with the developer repository of this NPM package &lt;a href="https://github.com/craigrileyuk/vue3-mq" rel="noopener noreferrer"&gt;https://github.com/craigrileyuk/vue3-mq&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Don't forget to program with ♥ ️.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>webdev</category>
      <category>vue</category>
    </item>
  </channel>
</rss>
