<?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: Fernando Cutire 🔨</title>
    <description>The latest articles on DEV Community by Fernando Cutire 🔨 (@fernandocutire).</description>
    <link>https://dev.to/fernandocutire</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%2F292121%2F254024c2-aabd-493c-966d-7c17977e45f4.png</url>
      <title>DEV Community: Fernando Cutire 🔨</title>
      <link>https://dev.to/fernandocutire</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fernandocutire"/>
    <language>en</language>
    <item>
      <title>I started to write on english, this is why</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Wed, 12 Jan 2022 13:50:32 +0000</pubDate>
      <link>https://dev.to/fernandocutire/i-started-to-write-on-english-this-is-why-4kce</link>
      <guid>https://dev.to/fernandocutire/i-started-to-write-on-english-this-is-why-4kce</guid>
      <description>&lt;p&gt;When I thought about this topic, I said to myself “Writing in English is hard, because it’s not my native language”&lt;/p&gt;

&lt;p&gt;It’s hard but is also an opportunity. I needed to start practicing my English. And guess what was the way?&lt;/p&gt;

&lt;p&gt;I said, “Ok I will start to write in English because almost every content I consume online is in English and I have read and watched a lot”&lt;/p&gt;

&lt;p&gt;But of course writing is challenging.&lt;/p&gt;

&lt;p&gt;So in this article, I teach you what it’s working for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing is hard: Thinking in a different language
&lt;/h2&gt;

&lt;p&gt;Of course, I could use the easy way who was to just use translate apps.&lt;/p&gt;

&lt;p&gt;But this was enough?&lt;/p&gt;

&lt;p&gt;I have been using google translate with my Spanish-based articles. And it worked weird.&lt;/p&gt;

&lt;p&gt;It doesn´t have that consistency or as I want to call “soul”.&lt;/p&gt;

&lt;p&gt;It seemed like just different words and doesn’t seem to be written by a human.&lt;/p&gt;

&lt;p&gt;So another thing that happens to me, was to begin writing in English. &lt;/p&gt;

&lt;p&gt;And maybe I will sound better, you can judge by yourself.&lt;/p&gt;

&lt;p&gt;Of course, my grammar is not the best, but anyways here I am. And I will continue to improve.&lt;/p&gt;

&lt;h2&gt;
  
  
  More writing equals better writing: Why consistency over time matters
&lt;/h2&gt;

&lt;p&gt;Just focusing on writing. It´s that simple?&lt;/p&gt;

&lt;p&gt;Maybe not, but some of the benefits I could say are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start thinking in English&lt;/li&gt;
&lt;li&gt;Start creating content (in English ofc)&lt;/li&gt;
&lt;li&gt;Having more articles makes you more confident. Like “I have written so many articles, I know I am good”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you see, there are many benefits and progress over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  In general, it´s cool to learn a new language in this way.
&lt;/h2&gt;

&lt;p&gt;Receiving and giving are both beautiful things to do.&lt;/p&gt;

&lt;p&gt;And consuming media in a different language makes it faster to learn it.&lt;/p&gt;

&lt;p&gt;Also, It seems that you are giving your knowledge, expertise and somehow improving the way for us.&lt;/p&gt;

&lt;p&gt;It´s that simple. &lt;/p&gt;

&lt;h2&gt;
  
  
  Let's connect
&lt;/h2&gt;

&lt;p&gt;Remember you can follow me on Twitter &lt;a href="https://twitter.com/fernandocutire"&gt;@fernandocutire&lt;/a&gt;, I am getting better at writing in English so we could talk there.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qyip4FVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5ym12tgb443cl6ztalq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qyip4FVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5ym12tgb443cl6ztalq.jpg" alt="Image description" width="880" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>writing</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why I am finishing my degree</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Tue, 11 Jan 2022 17:34:02 +0000</pubDate>
      <link>https://dev.to/fernandocutire/why-i-am-finishing-my-degree-4dem</link>
      <guid>https://dev.to/fernandocutire/why-i-am-finishing-my-degree-4dem</guid>
      <description>&lt;p&gt;Not only is people saying that a degree is useless, but actually not getting it.&lt;/p&gt;

&lt;p&gt;In tech Twitter, I have seen this phenomena&lt;/p&gt;

&lt;p&gt;I will explain why I am getting a degree and why I think it is a good deal.&lt;/p&gt;

&lt;h3&gt;
  
  
  A reasonable cost for a degree
&lt;/h3&gt;

&lt;p&gt;Getting my bachelor is not as costly as getting one in the US. &lt;/p&gt;

&lt;p&gt;Here in my country, a complete degree (excluding labs, books, and important stuff) is less than 500$, that´s worth it, considering that these are 5 years.&lt;/p&gt;

&lt;p&gt;Also, the university is the best forming engineers in my country.&lt;/p&gt;

&lt;h3&gt;
  
  
  A job without one it´s REALLY HARD
&lt;/h3&gt;

&lt;p&gt;I know about opportunities overseas.&lt;/p&gt;

&lt;p&gt;But here virtually every job description in my country requires a degree&lt;/p&gt;

&lt;p&gt;And equivalent experience is really hard to find.&lt;/p&gt;

&lt;p&gt;Also for the best jobs is useful for have a degree.&lt;/p&gt;

&lt;p&gt;If I want to move abroad, a degree could be useful too, especially considering a young man doesn´t have a lot of experience.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>These were my favorite apps of 2021</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Thu, 06 Jan 2022 21:15:47 +0000</pubDate>
      <link>https://dev.to/fernandocutire/these-were-my-favorite-apps-of-2021-2nof</link>
      <guid>https://dev.to/fernandocutire/these-were-my-favorite-apps-of-2021-2nof</guid>
      <description>&lt;p&gt;This is not some kind of paid promotion. Just that sometimes are curious about what other people use in a daily basis.&lt;/p&gt;

&lt;p&gt;When I ask, I get different responses and is cool to have this variety.&lt;/p&gt;

&lt;p&gt;So I present my favorite apps/software of the last year&lt;/p&gt;

&lt;h2&gt;
  
  
  My favorite apps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Calm
&lt;/h3&gt;

&lt;p&gt;A sleep and meditation app, has a ton of meditation exercises and calm music. Really an amazing app , i wish it has a better web app but for now it’s ok.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dashlane
&lt;/h3&gt;

&lt;p&gt;This password manager is really useful. By now it makes all that it needs to do. Also it has VPN, and a dark web email analyzer. It is a really great password manager.&lt;/p&gt;

&lt;h3&gt;
  
  
  Toggl
&lt;/h3&gt;

&lt;p&gt;It is a time tracker useful when working on different projects and clients. For me i use it to know how many time i spent on different topics.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rescuetime
&lt;/h3&gt;

&lt;p&gt;Another time tracker, this really blows my mind. It can track without specifying some task. When i open my PC it begins to track, really useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  OS: Ubuntu
&lt;/h3&gt;

&lt;p&gt;This was the year i began to use linux. Ubuntu has make things easier in development, although i had audio related issues, and the os freeze sometimes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's connnect
&lt;/h2&gt;

&lt;p&gt;Remember you can follow me on Twitter &lt;a class="mentioned-user" href="https://dev.to/fernandocutire"&gt;@fernandocutire&lt;/a&gt;, I am getting better at writing in English so we could talk there&lt;/p&gt;

</description>
      <category>software</category>
      <category>apps</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>4 years of taking online education taught me this (first year) Pt1</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Thu, 06 Jan 2022 20:51:57 +0000</pubDate>
      <link>https://dev.to/fernandocutire/5-years-of-taking-online-education-taught-me-this-first-year-pt1-eeh</link>
      <guid>https://dev.to/fernandocutire/5-years-of-taking-online-education-taught-me-this-first-year-pt1-eeh</guid>
      <description>&lt;p&gt;Online courses are everywhere, and every day there are more. &lt;br&gt;
This is not going anywhere, and don't expect that it would slow down.&lt;/p&gt;

&lt;p&gt;In a series of articles, I will explain my approach to online education. &lt;/p&gt;

&lt;p&gt;This is written in a personal way, maybe you can relate. It wasn't always perfect, I was really slow and the start.&lt;/p&gt;

&lt;h1&gt;
  
  
  So this was the first year.
&lt;/h1&gt;

&lt;p&gt;In my first year, I discover online courses, but I didn’t see it as a way that can help me at the time. &lt;/p&gt;

&lt;p&gt;I would only say to myself, this looks good but I don’t feel pressured to finish it, maybe someday, like when I am looking for a job I will have better reasons&lt;/p&gt;

&lt;p&gt;As you may know, my way of thinking was not very mature, and it wasn’t because I was at school with so many hours and for me, it was not a big deal to finish.&lt;/p&gt;

&lt;p&gt;The topics that interested me at the time were mainly programming and business. I enroll in 3 free udemy courses and paid for 3. I remember that I just completed 2 but because it was 2 hours or less, so no big deal.&lt;/p&gt;

&lt;p&gt;As you may know, some Udemy Courses can get through 30 hours of content, and this makes it hard to finish. At the time I thought that more content meant that the course was better, but obviously, I was mistaken.&lt;/p&gt;

&lt;p&gt;Finally, it is important to say that I just took courses from Spanish speakers instructors so as you may think, the offer was not very high back then.&lt;/p&gt;

&lt;p&gt;This series will continue.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's connnect
&lt;/h2&gt;

&lt;p&gt;Remember you can follow me on Twitter  &lt;a href="https://twitter.com/fernandocutire"&gt;@fernandocutire&lt;/a&gt;, I am getting better at writing in English so we could talk there&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>opensource</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My thoughts on working and studying full time
</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Wed, 05 Jan 2022 19:01:56 +0000</pubDate>
      <link>https://dev.to/fernandocutire/my-thoughts-on-working-and-studying-full-time-466e</link>
      <guid>https://dev.to/fernandocutire/my-thoughts-on-working-and-studying-full-time-466e</guid>
      <description>&lt;p&gt;Some time ago I was at an online university class, and i got lost on my mind if when i graduated i will have enough experience for a first job.&lt;/p&gt;

&lt;p&gt;I know internships and entry level jobs exist, but I dont't want to wait after i finished college to make it.&lt;/p&gt;

&lt;p&gt;Right now i decide that i will go through some interviews to get a first job. A first formal job not freelancing or internships. I have searched in different companies and i am wonder if i meet all the requirements. In the immense majority of jobs description that are listed, business want people with 3-5 years of experience on similar jobs.&lt;/p&gt;

&lt;p&gt;After job searching I know I don’t have enough experience, also project, research are not enough. Also, a full-time job in Panama are 8 hours a day, my university classes are 5 hours. The time is not enough.&lt;/p&gt;

&lt;p&gt;Right now i am on my 4th year of 5 years, which also means that the time I begin classes will be different, it varies every semester. For example, on my 3rd year we were always in the morning.&lt;/p&gt;

&lt;p&gt;But, based on my research, there’s a high chance that my classes begin at 4 pm or 5 pm (at best). Which let me work from 8am to 3pm. And if classes and work are remote (which there is a high chance that there will be) i can save on commute and make it all the work in my home.&lt;/p&gt;

&lt;p&gt;What’s the catch? No time (1 hour between work and study) and i will be with full classes (6 classes per semester), so things can get messy in bad times.&lt;/p&gt;

&lt;h2&gt;
  
  
  There’s always hope
&lt;/h2&gt;

&lt;p&gt;After these years i have been doing it pretty good with my classes, i got good grades this last 2 years. I have a high gpa and i have been praised for my very good work as an individual either as a team member.&lt;/p&gt;

&lt;p&gt;Also i have make improvements on my productivity and my life in general. So i know i could handle at make my best at these opportunities. Things always seem bad at first, but then i find a way&lt;/p&gt;

&lt;p&gt;See the full article at: &lt;a href="https://fernandocutire.com/my-thoughts-on-working-and-studying-full-time/"&gt;https://fernandocutire.com/my-thoughts-on-working-and-studying-full-time/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I share more of my experience in twitter &lt;br&gt;
&lt;a href="https://twitter.com/fernandocutire"&gt;follow me @fernandocutire&lt;/a&gt;&lt;/p&gt;

</description>
      <category>thinking</category>
      <category>beginners</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Serie Storybook: Escribiendo componentes - .stories.jsx vs stories.mdx </title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Fri, 15 Oct 2021 03:41:10 +0000</pubDate>
      <link>https://dev.to/fernandocutire/serie-storybook-escribiendo-componentes-storiesjsx-vs-storiesmdx-23do</link>
      <guid>https://dev.to/fernandocutire/serie-storybook-escribiendo-componentes-storiesjsx-vs-storiesmdx-23do</guid>
      <description>&lt;h2&gt;
  
  
  📰 En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Los archivos que acepta Storybook .stories.jsx y .stories.mdx&lt;/li&gt;
&lt;li&gt;Cómo se visualizan estos archivos en el navegador&lt;/li&gt;
&lt;li&gt;Cuando usar cual y por qué&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🗨️ Contenido
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Hora de construir
&lt;/h3&gt;

&lt;p&gt;Perfecto, hasta este momento debes de conocer la problemática que resuelve Storybook y como preparar tu entorno en local, así que solo falta construir.&lt;/p&gt;

&lt;h3&gt;
  
  
  El problema: Construir en storybook
&lt;/h3&gt;

&lt;p&gt;Dentro de la plantilla que construiste en el capítulo anterior te encontrarás con una introducción y otros archivos que simulan componentes, algo que puedes ver en tu navegador si correr &lt;code&gt;npm run start-storybook&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Esto que observa a la derecha, representan los diferentes tipos de archivos que construiremos en storybook&lt;/p&gt;

&lt;h2&gt;
  
  
  Storybook: Las historias del libro
&lt;/h2&gt;

&lt;p&gt;Una historia captura el estado renderizado de un componente de la interfaz de usuario. Los desarrolladores escriben varias historias por componente que describen todos los estados "interesantes" que un componente puede soportar.&lt;/p&gt;

&lt;p&gt;La CLI creó componentes de ejemplo que demuestran los tipos de componentes que puede crear con Storybook: botón, encabezado y página.&lt;/p&gt;

&lt;p&gt;Cada componente de ejemplo tiene un conjunto de historias que muestran los estados que apoya. Puede explorar las historias en la interfaz de usuario y ver el código detrás de ellas en archivos que terminan en .stories.js o .stories.ts. Las historias están escritas en formato Component Story Format (CSF), un estándar basado en módulos ES6, para escribir ejemplos de componentes.&lt;/p&gt;

&lt;p&gt;La pequeña documentación es algo personal de cada historia y se refiere en su mayoría a descripción de los controles. Es bueno saber que se pueden construir páginas enteras de documentación pero eso tiene su propio archivo que veremos más adelante&lt;/p&gt;

&lt;p&gt;En la captura de pantalla anterior estábamos mostrando el componente botón y nos basaremos en él para explicar los historias.&lt;/p&gt;

&lt;p&gt;El botón en realidad lo constituyen tres archivos: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;button.jsx (el componente en jsx)&lt;/li&gt;
&lt;li&gt;button.css (los estilos de el componente)&lt;/li&gt;
&lt;li&gt;button.stories.jsx (la historia de storybook sobre el componente)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ahora entremos a cada uno de estos archivos y veamos su código.&lt;/p&gt;

&lt;h3&gt;
  
  
  Button.jsx
&lt;/h3&gt;

&lt;p&gt;Este componente es uno normal de React , como ves importa las librerías React y Proptypes. También importa estilos CSS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&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;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./button.css&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;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;storybook-button--primary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;storybook-button--secondary&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;
      &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"button"&lt;/span&gt;
      &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;storybook-button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`storybook-button--&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;backgroundColor&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;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;Más abajo es cuando se torna interesante, como viste en el componente se le pasan parámetros (props) al componente botón, esto se define mejor en:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;propTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * Is this the principal call to action on the page?
   */&lt;/span&gt;
  &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * What background color to use
   */&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * How large should the button be?
   */&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oneOf&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;large&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * Button contents
   */&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="cm"&gt;/**
   * Optional click handler
   */&lt;/span&gt;
  &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultProps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;primary&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;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;undefined&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;Dentro de Button.propTypes están incluidos como puedes ver los controles del componente. Dependiendo del control habrá diferentes opciones, por ejemplo size solo acepta tres valores, small, medium o large, pero backgroundColor acepta una cadena.&lt;/p&gt;

&lt;p&gt;Habrás notado que arriba de cada control hay una pequeña documentación. Esta se refiere a la descripción que aparece en el punto 3 de Pequeña documentación. &lt;/p&gt;

&lt;p&gt;Dentro Button.defaultProps están los valores por defecto del componente, dándole a cada control un valor por defecto a mostrarse.&lt;/p&gt;

&lt;h3&gt;
  
  
  button.css
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.storybook-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Nunito Sans'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'Helvetica Neue'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Helvetica&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;700&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&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="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3em&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;line-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.storybook-button--primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1ea7fd&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.storybook-button--secondary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&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="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.15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;inset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.storybook-button--small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.storybook-button--medium&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;11px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.storybook-button--large&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="m"&gt;24px&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;Aquí es solo una hoja de estilos para nuestro componente.&lt;/p&gt;

&lt;p&gt;Por supuesto, como css, también se puede usar scss o sass&lt;/p&gt;

&lt;h3&gt;
  
  
  Button.stories.jsx
&lt;/h3&gt;

&lt;p&gt;Es en este archivo donde storybook se comunica con nuestro componente React , &lt;code&gt;Button.jsx&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&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;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Button&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;./Button&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="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Example/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;argTypes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;control&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;color&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;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En la primera parte se importan los componentes, se exporta un default , este incluye el título que se mostrará en el storybook, el nombre del componente (en este caso Button) y unos argTypes que en este caso especificar un backgroundColor.&lt;/p&gt;

&lt;p&gt;Siguiendo más abajo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&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;Primary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
&lt;span class="nx"&gt;Primary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;primary&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;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Button&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Secondary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
&lt;span class="nx"&gt;Secondary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Button&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Large&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
&lt;span class="nx"&gt;Large&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;large&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Button&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;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Small&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Template&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;({});&lt;/span&gt;
&lt;span class="nx"&gt;Small&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Button&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;Se crea un componente Template que se le coloca un componente Button y se le pasan argumentos.&lt;/p&gt;

&lt;p&gt;Después se ve que se exportan 5 const, Primary, Secondary, Large y Small. Estas corresponden a la sección de cada uno de los tipos de botón. Por eso puedes ver que se le pueden colocar argumentos a cada uno.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F603b1b2a-43c5-4907-9ab6-685991eab357%2FUntitled.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F603b1b2a-43c5-4907-9ab6-685991eab357%2FUntitled.png" alt="Untitled"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y esto sería lo básico para escribir componentes y mostrarlos en storybook. Ves que puedes colocar controles y asignar componentes de react.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storybook: documentando el trayecto
&lt;/h2&gt;

&lt;p&gt;Así como hay componentes , también necesitamos una documentación más exhaustiva, un lienzo blanco donde escribir.&lt;/p&gt;

&lt;p&gt;Este archivo corresponde a los que tienen terminación &lt;code&gt;.stories.mdx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como es en el caso de Introduction. Si vamos al archivo, es un documento algo largo donde que nos importa son que puedes importar addons de storybook, que sencillamante son extensiones que dan funcionalidades especiales, para motivos de esta serie, se ve una sencilla como es Meta, pero &lt;a href="https://storybook.js.org/docs/react/essentials/introduction" rel="noopener noreferrer"&gt;existen más que se pueden ver la documentación de storybook.&lt;/a&gt; Otro detalle importante es que se pueden colocar estilos a la documentación. También, esta documentación se puede escribir en formato markdown y html, dentro del mismo archivo y aún así funciona de maravilla como se muestra en el ejemplo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;Storybook&lt;/span&gt;

&lt;span class="nx"&gt;Storybook&lt;/span&gt; &lt;span class="nx"&gt;helps&lt;/span&gt; &lt;span class="nx"&gt;you&lt;/span&gt; &lt;span class="nx"&gt;build&lt;/span&gt; &lt;span class="nx"&gt;UI&lt;/span&gt; &lt;span class="nx"&gt;components&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;isolation&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;your&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s business logic, data, and context.
That makes it easy to develop hard-to-reach states. Save these UI states as **stories** to revisit during development, testing, or QA.

Browse example stories now by navigating to them in the sidebar.
View their code in the `src/stories` directory to learn how they work.
We recommend building UIs with a [**component-driven**](https://componentdriven.org) process starting with atomic components and ending with pages.

&amp;lt;div className="subheading"&amp;gt;Configure&amp;lt;/div&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ¿ .stories.mdx o .stories.jsx ?
&lt;/h2&gt;

&lt;p&gt;Usar documentación o un componente, la respuesta se da por si sola. Si buscas mostrar los componentes que has hecho en React, es preciso emplear un .stories.jsx y proporcionar controles para que tu equipo pueda observar las diferentes variantes del botón, campo de texto o componente que quieras mostrar.&lt;/p&gt;

&lt;p&gt;Por el otro lado , usar .stories.mdx se refiere más que nada a mencionar ciertas guías a tu equipo, guías que no requieren de mostrar el componente necesariamente (aunque también se puede importar y colocar dentro de este tipo de archivos), sino más bien para informar. Por eso es que se creó este tipo de archivo.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Recapitulando
&lt;/h2&gt;

&lt;p&gt;Repasemos lo que aprendiste&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existen 2 tipos de archivos principales, que storybook lee &lt;code&gt;.stories.jsx&lt;/code&gt; (typescript tsx) y &lt;code&gt;.stories.mdx&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Un &lt;code&gt;.stories.jsx&lt;/code&gt; recibe un componente de react (usualmente .jsx o .tsx si es en typescript)&lt;/li&gt;
&lt;li&gt;El componente de react es común, importando estilos y librerías necesarias, pero se le añaden propiedades que terminan siendo controles de storybook&lt;/li&gt;
&lt;li&gt;Para saber si usar .stories.jsx o .stories.mdx, hazte la pregunt ¿Necesito documentación o mostrar un componente con controles? Si es documentación &lt;code&gt;.stories.mdx&lt;/code&gt;, un componente y permitir al usuario tener controles &lt;code&gt;.stories.jsx&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔚 Fin
&lt;/h2&gt;

&lt;p&gt;Sabes crear componentes &lt;code&gt;.stories.jsx&lt;/code&gt; y documentación &lt;code&gt;.stories.mdx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Puedes dar controles a los componentes para que tu equipo interactúe con ellos y puedes documentar sus propiedades.&lt;/p&gt;

&lt;p&gt;Puedes escribir documentación usando &lt;code&gt;.stories.mdx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Puedes distinguir cuando usar&lt;code&gt;.stories.jsx&lt;/code&gt; &lt;code&gt;.stories.mdx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Te invito a que veas mi repositorio de github, con el material.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FernandoCutire/poc-learn-storybook" rel="noopener noreferrer"&gt;GitHub - FernandoCutire/poc-learn-storybook: A free storybook template created with CRA to make proof of concepts of storybook&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Continua la serie
&lt;/h2&gt;

&lt;p&gt;Esto no se termina aquí, puedes continuar los siguientes capítulos de la serie Storybook para averiguar como termina.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-usando-storybook-para-desarrollo-de-componentes-194i"&gt;Serie Storybook: Usando storybook para desarrollo de componentes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entendiendo el concepto de Storybook, cuando usarlo e introducción para desarrolladores&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-corriendo-storybook-en-local-codigo-en-github-3o57"&gt;Serie Storybook: Corriendo storybook en local + Código en github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desarrollarás un repositorio de Storybook en tu computadora local&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-escribiendo-componentes-storiesjsx-vs-storiesmdx-23do"&gt;Serie Storybook: Escribiendo componentes - .stories.jsx vs stories.mdx&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Desarrollarás .stories.jsx y .stories.mdx , aprenderás como se forman y como funciona el núcleo principal en Storybook.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Lecturas Adicionales
&lt;/h2&gt;

&lt;p&gt;Leer es bueno, aquí te dejo algunas fuentes adicionales a este artículo para que puedas complementar y aclarar conocimientos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learning.oreilly.com/library/view/react-cookbook/9781492085836/" rel="noopener noreferrer"&gt;React Cookbook: David Griffiths, Dawn Griffiths O Reilly Media Inc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dogriffiths/ReactCookbook-source" rel="noopener noreferrer"&gt;React Cookbook: Source Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👊🏽 Turno para tí: Comenta y comparte
&lt;/h2&gt;

&lt;p&gt;Si te ha gustado la serie, dale a me gusta, compárteselo a quién veas que lo necesita y comenta si tienes alguna duda&lt;/p&gt;

</description>
      <category>storybook</category>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Serie Storybook: Corriendo storybook en local + Código en github</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Fri, 15 Oct 2021 03:38:31 +0000</pubDate>
      <link>https://dev.to/fernandocutire/serie-storybook-corriendo-storybook-en-local-codigo-en-github-3o57</link>
      <guid>https://dev.to/fernandocutire/serie-storybook-corriendo-storybook-en-local-codigo-en-github-3o57</guid>
      <description>&lt;h2&gt;
  
  
  📰 En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Que se requiere para correr Storybook&lt;/li&gt;
&lt;li&gt;Los pasos para inicializar Storybook usando create-react-app como boilerplate&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🗨️ Contenido
&lt;/h2&gt;

&lt;p&gt;Bienvenido al segundo episodio de la serie de Storybook.&lt;/p&gt;

&lt;p&gt;Antes de empezar a tirar comandos, es importante que tengas primero una aplicación corriendo. Esto se puede lograr gracias a create-react-app que nos dará un boilerplate de una aplicación react que servirá de base para storybook, &lt;strong&gt;aclaro este punto porque storybook no creará esto por su cuenta y requerirá que primero tengas la aplicación creada.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Con eso en mente, estos son los pasos a seguir.&lt;/p&gt;

&lt;p&gt;Antes de continuar recuerda tener instalado npm, y CRA (Create-react-app) en tu computadora local.&lt;/p&gt;

&lt;p&gt;Crear una aplicación en react , colocando estos comandos en la terminal.&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;npx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;create-react-app&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;storybook-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entrando a la carpeta de nuestra aplicación&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;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;storybook-app&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después de ello, tendremos una aplicación de react en funcionamiento.&lt;/p&gt;

&lt;p&gt;Con ello , &lt;strong&gt;ahora sí añadiremos storybook&lt;/strong&gt;&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;npx&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;sb&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego de que se haya instalado, iniciaremos el servidor de Storybook&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;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;storybook&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Storybook ejecuta un servidor separado en el puerto 8086 (o en el que hayas elegido), como puede ver en la figura. &lt;strong&gt;Cuando usa Storybook, no es necesario ejecutar la aplicación de React.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffc3b3924-a7df-4b09-b987-e7fd1d69f370%2FUntitled.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2Ffc3b3924-a7df-4b09-b987-e7fd1d69f370%2FUntitled.png" alt="Untitled"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta aquí tendremos storybook corriendo en local, si todos los logs han ido bien.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Recapitulando
&lt;/h2&gt;

&lt;p&gt;Repasemos lo que aprendiste&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tener instalado npm y cra para continuar el tutorial. Sino una aplicación react funcional.&lt;/li&gt;
&lt;li&gt;Storybook corre en base a una aplicación lista, no en una carpeta vacía, tómalo en cuenta antes de correr &lt;code&gt;npx sb init&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔚 Fin
&lt;/h2&gt;

&lt;p&gt;Te dejo un repositorio con storybook configurado. Además te encontrarás con otros elementos configurados como docker, travis.yml, sientete libre de clonar el repostorio y trabajar en tus propios proyectos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FernandoCutire/poc-learn-storybook" rel="noopener noreferrer"&gt;GitHub - FernandoCutire/poc-learn-storybook: A free storybook template created with CRA to make proof of concepts of storybook&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Continua la serie
&lt;/h2&gt;

&lt;p&gt;Esto no se termina aquí, puedes continuar los siguientes capítulos de la serie Storybook para averiguar como termina.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-usando-storybook-para-desarrollo-de-componentes-194i"&gt;Serie Storybook: Usando storybook para desarrollo de componentes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entendiendo el concepto de Storybook, cuando usarlo e introducción para desarrolladores&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-corriendo-storybook-en-local-codigo-en-github-3o57"&gt;Serie Storybook: Corriendo storybook en local + Código en github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desarrollarás un repositorio de Storybook en tu computadora local&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-escribiendo-componentes-storiesjsx-vs-storiesmdx-23do"&gt;Serie Storybook: Escribiendo componentes - .stories.jsx vs stories.mdx&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Desarrollarás .stories.jsx y .stories.mdx , aprenderás como se forman y como funciona el núcleo principal en Storybook.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Lecturas Adicionales
&lt;/h2&gt;

&lt;p&gt;Leer es bueno, aquí te dejo algunas fuentes adicionales a este artículo para que puedas complementar y aclarar conocimientos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learning.oreilly.com/library/view/react-cookbook/9781492085836/" rel="noopener noreferrer"&gt;React Cookbook: David Griffiths, Dawn Griffiths O Reilly Media Inc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dogriffiths/ReactCookbook-source" rel="noopener noreferrer"&gt;React Cookbook: Source Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👊🏽 Turno para tí: Comenta y comparte
&lt;/h2&gt;

&lt;p&gt;Si te ha gustado la serie, dale a me gusta, compárteselo a quién veas que lo necesita y comenta si tienes alguna duda&lt;/p&gt;

</description>
      <category>storybook</category>
      <category>react</category>
      <category>javascript</category>
      <category>github</category>
    </item>
    <item>
      <title>Serie Storybook: Usando storybook para desarrollo de componentes</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Wed, 13 Oct 2021 14:02:28 +0000</pubDate>
      <link>https://dev.to/fernandocutire/serie-storybook-usando-storybook-para-desarrollo-de-componentes-194i</link>
      <guid>https://dev.to/fernandocutire/serie-storybook-usando-storybook-para-desarrollo-de-componentes-194i</guid>
      <description>&lt;h2&gt;
  
  
  📰 En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Cuál es el material de construcción primordial de React y el por qué de su importancia&lt;/li&gt;
&lt;li&gt;Qué es Storybook&lt;/li&gt;
&lt;li&gt;El porqué de Storybook al desarrollar junto a equipos&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🗨️ Contenido
&lt;/h2&gt;

&lt;h3&gt;
  
  
  El problema
&lt;/h3&gt;

&lt;p&gt;Los componentes de React son el material de construcción primordial de las aplicaciones React. Si los escribimos con inteligencia, podemos reutilizar los componentes en otras aplicaciones de React. Pero cuando construye un componente, es necesario trabajar para comprobar cómo funciona en todas las circunstancias. Por ejemplo, en una aplicación asincrónica, React podría representar el componente con propiedades indefinidas. ¿El componente seguirá renderizándose correctamente? ¿Mostrará errores?&lt;/p&gt;

&lt;p&gt;Pero si está construyendo componentes como parte de una aplicación compleja, puede ser difícil crear todas las situaciones que su componente deberá afrontar.&lt;/p&gt;

&lt;p&gt;Además, &lt;strong&gt;si tiene desarrolladores especializados en experiencia de usuario&lt;/strong&gt; (UX) trabajando en su equipo, &lt;strong&gt;puede perder mucho tiempo si tienen que navegar a través de una aplicación para ver el componente único que tienen en desarrollo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sería útil si hubiera alguna forma de mostrar un componente de forma aislada y pasarle conjuntos de propiedades de ejemplo. Aquí es cuando entra la solución&lt;/p&gt;

&lt;h3&gt;
  
  
  Storybook: la herramienta para desplegar componentes
&lt;/h3&gt;

&lt;p&gt;Storybook es una herramienta para mostrar bibliotecas de componentes en varios estados. Podría describirlo como una galería de componentes (aunque no le hace justicia). En realidad, &lt;strong&gt;Storybook es una herramienta para el desarrollo de sistemas de diseño basados en componentes&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sistemas de Diseño ¿Son necesarios?
&lt;/h3&gt;

&lt;p&gt;Como mencioné en el anterior párrafo el Storybook nos permite estar en la intersección entre varios equipos (frontend, UI, UX) gracias a que provee un sistema de diseño basado en componentes.&lt;br&gt;
Pero a pesar de la publicidad y alboroto, &lt;strong&gt;un sistema de diseño no es una solución milagrosa o panacea&lt;/strong&gt;. Si trabajas en un equipo modesto en una sola aplicación, estará mejor con un directorio de componentes de IU en lugar de configurar la infraestructura para habilitar un sistema de diseño. &lt;/p&gt;

&lt;p&gt;La escalabilidad de un sistema de diseño funciona a su favor cuando comparte componentes de interfaz de usuario en muchos proyectos. Si se encuentra pegando los mismos componentes de la interfaz de usuario en diferentes aplicaciones o entre equipos, esta guía es para usted.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Recapitulando
&lt;/h2&gt;

&lt;p&gt;Repasemos lo que aprendiste&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los componentes de React son el material de construcción primordial de las aplicaciones React.&lt;/li&gt;
&lt;li&gt;Si piensas con inteligencia, puedes reusar componentes de React&lt;/li&gt;
&lt;li&gt;Si solo se toca la parte del código, pueden haber discrepancias e ineficiencias entre equipos, especialmente de UX, UI y Frontend.&lt;/li&gt;
&lt;li&gt;Storybook permite crear sistemas de diseños basados en componentes.&lt;/li&gt;
&lt;li&gt;Storybook también resuelve la ineficiencia entre equipos, al dar un entorno de desarrollo para frontend, y brindar un entorno de producción para que los demás equipos puedan visualizar el trabajo y hacer comentarios cuando se requiera.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔚 Fin
&lt;/h2&gt;

&lt;p&gt;Sabes cuando un sistema de diseño es una opción viable. Conoces que los componentes son el bloque principal de React y estás anuente de la importancia para los equipos.&lt;/p&gt;

&lt;h2&gt;
  
  
  📺 Continua la serie
&lt;/h2&gt;

&lt;p&gt;Esto no se termina aquí, puedes continuar los siguientes capítulos de la serie Storybook para averiguar como termina.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-usando-storybook-para-desarrollo-de-componentes-194i"&gt;Serie Storybook: Usando storybook para desarrollo de componentes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Entendiendo el concepto de Storybook, cuando usarlo e introducción para desarrolladores&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-corriendo-storybook-en-local-codigo-en-github-3o57"&gt;Serie Storybook: Corriendo storybook en local + Código en github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Desarrollarás un repositorio de Storybook en tu computadora local&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/fernandocutire/serie-storybook-escribiendo-componentes-storiesjsx-vs-storiesmdx-23do"&gt;Serie Storybook: Escribiendo componentes - .stories.jsx vs stories.mdx&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Desarrollarás .stories.jsx y .stories.mdx , aprenderás como se forman y como funciona el núcleo principal en Storybook.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Lecturas Adicionales
&lt;/h2&gt;

&lt;p&gt;Leer es bueno, aquí te dejo algunas fuentes adicionales a este artículo para que puedas complementar y aclarar conocimientos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://learning.oreilly.com/library/view/react-cookbook/9781492085836/"&gt;React Cookbook: David Griffiths, Dawn Griffiths O Reilly Media Inc&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dogriffiths/ReactCookbook-source"&gt;React Cookbook: Source Code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://storybook.js.org/"&gt;Storybook Documentation&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👊🏽 Turno para tí: Comenta y comparte
&lt;/h2&gt;

&lt;p&gt;Si te ha gustado la serie, dale a me gusta, compárteselo a quién veas que lo necesita y comenta si tienes alguna duda&lt;/p&gt;

</description>
      <category>storybook</category>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>✅ Solución: SSH Config -Problemas por múltiples cuentas de git en un mismo ordenador</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Tue, 17 Aug 2021 19:18:53 +0000</pubDate>
      <link>https://dev.to/fernandocutire/solucion-a-problemas-por-multiples-cuentas-de-git-ssh-config-1eh7</link>
      <guid>https://dev.to/fernandocutire/solucion-a-problemas-por-multiples-cuentas-de-git-ssh-config-1eh7</guid>
      <description>&lt;h2&gt;
  
  
  📰 En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;El problema de tener muchas cuentas de git, gitlab&lt;/li&gt;
&lt;li&gt;Una solución sencilla si te da problemas al momento de clonar o hacer push a un repo de forma remota por ssh&lt;/li&gt;
&lt;li&gt;Por qué colocar las llaves ssh no es suficiente &lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  🗨️ Contenido
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Toda gran solución comienza con un gran problema&lt;/em&gt;. El día de hoy solucionaremos el:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Git&lt;/span&gt; &lt;span class="nx"&gt;fatal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Could&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;read&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="nx"&gt;remote&lt;/span&gt; &lt;span class="nx"&gt;repository&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto me sucedió a mí cuando quería hacer un git clone de mi repo personal de github. Y &lt;em&gt;ya había configurado mi llave ssh.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sucede también que tenía configurada mi cuenta de gitlab de la organización donde trabajo también la tenía configurada también.&lt;/p&gt;

&lt;p&gt;Entonces me dió problema, puede que te pase igual. Yo solo tenía 2 cuentas pero tú puedes tener incluso más, entonces para que no se te vuelva muy dificil de manejar , te recomiendo que implementes esta solución.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Solución
&lt;/h2&gt;

&lt;p&gt;La solución viene de la mano de un archivo que insertaras en tu carpeta .ssh/&lt;/p&gt;

&lt;p&gt;Esta carpeta se creó al momento de crear tu llave ssh, así que si no las hecho, te recomiendo que lo hagas y regreses aquí.&lt;/p&gt;

&lt;p&gt;Ahora dentro de esta carpeta insertaremos un archivo config. Este tendrá una estructura que nos podrá incorporar varias claves ssh en un formato sencillo de leer ideal para manejar diferentes llaves ssh, que podrás incorporar como tu creas sea mejor.&lt;/p&gt;

&lt;p&gt;Aquí el código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;GITHUB&lt;/span&gt;
&lt;span class="nx"&gt;Host&lt;/span&gt; &lt;span class="nx"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;
   &lt;span class="nx"&gt;HostName&lt;/span&gt; &lt;span class="nx"&gt;github&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;
   &lt;span class="nx"&gt;PreferredAuthentications&lt;/span&gt; &lt;span class="nx"&gt;publickey&lt;/span&gt;
   &lt;span class="nx"&gt;IdentityFile&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;/.ssh/gi&lt;/span&gt;&lt;span class="nx"&gt;thub&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;id_rsa_pub&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;GITLAB&lt;/span&gt;
&lt;span class="nx"&gt;Host&lt;/span&gt; &lt;span class="nx"&gt;gitlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;
   &lt;span class="nx"&gt;HostName&lt;/span&gt; &lt;span class="nx"&gt;gitlab&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;com&lt;/span&gt;
   &lt;span class="nx"&gt;PreferredAuthentications&lt;/span&gt; &lt;span class="nx"&gt;publickey&lt;/span&gt;
   &lt;span class="nx"&gt;IdentityFile&lt;/span&gt; &lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;/.ssh/i&lt;/span&gt;&lt;span class="nx"&gt;d_rsa_pub&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El nombre del archivo es config&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Puedes configurarlo para varias cuentas por ejemplo GITHUB PERSONAL, GITHUB PROFESIONAL.&lt;/strong&gt; Entonces usar una llave ssh diferente para cada una, así se detectará bien y no habrá problema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recuerda también el &lt;code&gt;IdentityFile&lt;/code&gt;, muy importante para separar las diferentes llaves&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Recapitulando
&lt;/h2&gt;

&lt;p&gt;Repasemos lo que aprendiste&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creación de config&lt;/li&gt;
&lt;li&gt;Diferentes problemas a la hora de tener diferentes cuentas en una misma máquina&lt;/li&gt;
&lt;li&gt;Por qué colocar las llaves ssh no es suficiente&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔚 Fin
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Ya has podido identificar el problema de llevar diferentes cuentas y has podido solucionarlo gracias a un config&lt;/em&gt;. Colocaste las diferentes llaves con nombres diferentes y colocaste su ubicación dentro del archivo config, y tienes todo mucho más ordenado y sin problemas al usar conexiones ssh para repositorios.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gist.github.com/FernandoCutire/4c8589813bef6a5c914706b530fee102"&gt;GitHub Gist - FernandoCutire -Solución: SSH Config -Problemas por múltiples cuentas de git en un mismo ordenador&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👊🏽 Turno para tí: Comenta y comparte
&lt;/h2&gt;

&lt;p&gt;Has aprendido a darle una solución a este problema, &lt;strong&gt;lamentablemente todavía existe este problema para varios desarrolladores, compartiendo la solución podemos ayudar a que deje de serlo&lt;/strong&gt;. Puedes compartir la guía si te ha sido útil y/o comentar por si te ha dado un problema.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aunque sea por un gol de diferencia, la victoria es victoria&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>github</category>
      <category>gitlab</category>
      <category>git</category>
      <category>development</category>
    </item>
    <item>
      <title>📰 Contenedores: create-react-app + Storybook + Docker (Con repositorio)</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Fri, 13 Aug 2021 20:44:19 +0000</pubDate>
      <link>https://dev.to/fernandocutire/contenedores-create-react-app-storybook-docker-con-repositorio-29f9</link>
      <guid>https://dev.to/fernandocutire/contenedores-create-react-app-storybook-docker-con-repositorio-29f9</guid>
      <description>&lt;p&gt;En este artículo crearemos una imagen de docker con base a una aplicación en storybook, esto servirá para que otros desarrolladores puedan correr la aplicación sin proble,as&lt;/p&gt;

&lt;h2&gt;
  
  
  📰 En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Cómo empaquetar una aplicación en un contenedor docker&lt;/li&gt;
&lt;li&gt;El desarrollo de un contenedor para una aplicación JS&lt;/li&gt;
&lt;li&gt;Cómo ver los puertos del contenedor&lt;/li&gt;
&lt;li&gt;Solución a errores comunes al empaquetar SPA (Single Page Application)&lt;/li&gt;
&lt;li&gt;Repositorio con código completo para que puedas &lt;a href="https://github.com/FernandoCutire/storybook-docker"&gt;probar la aplicación&lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Respuesta corta, te lo han pedido subirán el storybook a la nube y quieren tener tu sistema de diseño en un pipeline siempre atento.&lt;/p&gt;

&lt;p&gt;Puedes leer más sobre docker en mi artículo de Docker para desarrolladores&lt;/p&gt;

&lt;h2&gt;
  
  
  Comenzando
&lt;/h2&gt;

&lt;p&gt;Para este ejemplo decidí usar create-react-app para la aplicación &lt;code&gt;npx create-react-app storybook-docker&lt;/code&gt;. Recuerda que storybook en su documentación dice que su comando &lt;code&gt;sb init&lt;/code&gt; no funciona sin tener una aplicación antes corriendo, así que es mejor que sigas los pasos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 1: Crea la aplicación
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;npx create-react-app storybook-docker&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Si ya tienes tu app, usa tu aplicación y ve al siguiente paso&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 2: Storybook
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;sb init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nota: No funciona en proyectos vacíos por eso usar primero react app&lt;/p&gt;

&lt;p&gt;Si ya tienes tu storybook ahora sí vayamos a dockerizar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 3: Docker
&lt;/h3&gt;

&lt;p&gt;Para este paso, es recomendable que entiendas como funciona un Dockerfile, te lo explico mejor &lt;a href="https://dev.to/fernandocutire/docker-para-desarrolladores-bk6"&gt;aquí&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este es el código que uso para mi Dockerfile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="c"&gt;# Usar una imagen  &lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:current-alpine3.14&lt;/span&gt;

&lt;span class="c"&gt;# Establecer el directorio de trabajo de nuestro contenedor&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /usr/src/app&lt;/span&gt;

&lt;span class="c"&gt;# Copiar el package.json a la carpeta /app de nuestro contenedor&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json /app&lt;/span&gt;

&lt;span class="c"&gt;# Copiará otros archivos de la aplicación&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="c"&gt;# Ejecutar el comando npm set progress=false &amp;amp;&amp;amp; npm install&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Exponer el puerto 8086 de el contenedor docker, fin de documentación&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8086&lt;/span&gt;

&lt;span class="c"&gt;# Correrá este comando al final cuando se esté corriendo el contenedor&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "run", "storybook"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puedes realizar este y añadirle según tus necesidades, yo solo necesito esos comandos así que lo dejo así.&lt;/p&gt;

&lt;h3&gt;
  
  
  Paso 4: docker-compose
&lt;/h3&gt;

&lt;p&gt;Yo para este proyecto uso docker-compose.yml&lt;/p&gt;

&lt;p&gt;Puede que no sea necesario tomando en cuenta que solo es una aplicación pero a la hora de manejar más en tu aplicación puede serte útil, así que dejó el código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;version: "3"
services:
  storybook:
    ports:
      - "8086:8086"
    build: .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí se expone el puerto 8086.&lt;/p&gt;

&lt;p&gt;Corre tu aplicación con un &lt;code&gt;docker-compose up&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adicional
&lt;/h3&gt;

&lt;p&gt;Algo que me dió problema fue en el package.json, ya que corría mi aplicación dentro del docker pero no podía observarla en el navegador.&lt;/p&gt;

&lt;p&gt;Así que revisando mi package.json, expuse el puerto 8086 también ya que por defecto viene otro, te recomiendo que si te da problemas también lo hagas.&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;"storybook-docker"&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.1.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;"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="nl"&gt;"@testing-library/jest-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^5.14.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@testing-library/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^11.2.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@testing-library/user-event"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^12.8.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-dom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^17.0.2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"react-scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.0.3"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"web-vitals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^1.1.2"&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;"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;"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;"react-scripts start"&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;"react-scripts 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;"react-scripts 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;"eject"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"react-scripts eject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"storybook"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"start-storybook -p 8086"&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-storybook"&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-storybook -s public"&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;"eslintConfig"&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;"extends"&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="s2"&gt;"react-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;"react-app/jest"&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;"overrides"&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;"files"&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="s2"&gt;"**/*.stories.*"&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;"rules"&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;"import/no-anonymous-default-export"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"off"&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;span class="nl"&gt;"browserslist"&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="s2"&gt;"&amp;gt;0.2%"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"not dead"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="s2"&gt;"not op_mini all"&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="s2"&gt;"last 1 chrome 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;"last 1 firefox 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;"last 1 safari version"&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;"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="nl"&gt;"@storybook/addon-actions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/addon-essentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/addon-links"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/node-logger"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.7"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@storybook/preset-create-react-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;"^3.2.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;"@storybook/react"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^6.3.7"&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;Fijate en el comando que dice &lt;code&gt;"storybook": "start-storybook -p 8086"&lt;/code&gt;, ese sería el que deberías de cambiar.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔥 Recapitulando
&lt;/h2&gt;

&lt;p&gt;Repasemos lo que aprendiste&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tener una aplicación corriendo antes de iniciar storybook, una app como la que te genera create-react-app&lt;/li&gt;
&lt;li&gt;Entender como funciona un Dockerfile, para añadir capas según lo necesario&lt;/li&gt;
&lt;li&gt;Verificar los puertos después de montar tu contenedor&lt;/li&gt;
&lt;li&gt;Revisar el package.json con el comando que corras para inicializar storybook por si te da problemas al momento de visualizar tu contenedor en el servidor local.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔚 Fin
&lt;/h2&gt;

&lt;p&gt;Sabes como dockerizar una SPA en un entorno de desarrollo, recuerda el repositorio de github, para que tengas un acceso a todo el código,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/FernandoCutire/storybook-docker"&gt;GitHub - FernandoCutire/storybook-docker: Dockeriza un proyecto storybook&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>storybook</category>
      <category>react</category>
      <category>github</category>
    </item>
    <item>
      <title>Conexión github</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Thu, 12 Aug 2021 23:05:59 +0000</pubDate>
      <link>https://dev.to/fernandocutire/conexion-github-1084</link>
      <guid>https://dev.to/fernandocutire/conexion-github-1084</guid>
      <description>&lt;p&gt;Conexión con github&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🐳 Docker para desarrolladores</title>
      <dc:creator>Fernando Cutire 🔨</dc:creator>
      <pubDate>Thu, 12 Aug 2021 23:05:11 +0000</pubDate>
      <link>https://dev.to/fernandocutire/docker-para-desarrolladores-bk6</link>
      <guid>https://dev.to/fernandocutire/docker-para-desarrolladores-bk6</guid>
      <description>&lt;p&gt;Docker es una herramienta maravillosa para desarrolladores y el concepto de empaquetar tus dependencias en un solo lugar que corre en cualquier lugar suena casi utóṕico.&lt;/p&gt;

&lt;h2&gt;
  
  
  En este artículo aprenderás
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Cómo leer un Dockerfile&lt;/li&gt;
&lt;li&gt;Problemas comunes al correr tu Dockerfile&lt;/li&gt;
&lt;li&gt;Analizar Dockerfile de una SPA&lt;/li&gt;
&lt;li&gt;Cómo construir tus propios dockerfile&lt;/li&gt;
&lt;li&gt;Keywords básicas sobre los Dockerfile&lt;/li&gt;
&lt;li&gt;Qué es alpine y porqué es usado&lt;/li&gt;
&lt;li&gt;Donde buscar imágenes para tus contenedores&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Usaré un ejemplo para que podamos entender mejor el funcionamiento de un Dockerfile, un ejemplo para una aplicación de react&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:current-alpine3.14&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /usr/src/app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8086&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "run", "storybook"]&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Si empleamos la similitud entre un contenedor de esos que los barcos transportan y los docker lo podemos entender de una manera mucho más sencilla y práctica.&lt;/p&gt;

&lt;p&gt;Es verdad que dentro de un contenedor puedes meter una cantidad exacta de mercancía, pero de diferentes tipos y estos poseen un tamaño específico para que sean fáciles de identificar y de llevar por los barcos.&lt;/p&gt;

&lt;p&gt;En docker funciona de forma similar, solo que nuestra mercancía es nuestra aplicación y las reglas son las siguientes.&lt;/p&gt;

&lt;p&gt;De manera práctica nos encontraremos con &lt;/p&gt;

&lt;h2&gt;
  
  
  FROM
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:current-alpine3.14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto significa que se genera un contenedor a partir de una &lt;strong&gt;imagen&lt;/strong&gt;, podemos pensar en ella como un molde que es la primera capa de nuestro contenedor. Ella tendrá configuraciones específicas que servirán para correr los comandos consecuentes, puedes ver que uso node:current-alpine3.14&lt;/p&gt;

&lt;p&gt;Esta imagen la encuentro en la página de &lt;a href="https://hub.docker.com/_/node"&gt;docker hub&lt;/a&gt;, que podemos pensar en ella como un repositorio de imágenes, comúnmente buscarás &lt;strong&gt;imágenes oficiales&lt;/strong&gt; (estas tienen un símbolo de imagen oficial a lado del nombre). &lt;/p&gt;

&lt;p&gt;En docker funciona de forma similar, solo que nuestra mercancía es nuestra aplicación y las reglas son las siguientes.&lt;/p&gt;

&lt;p&gt;Ahora conocemos que esto de node:current-alpine3.14 es el nombre completo de la imagen que usamos como base, pero ¿Qué es alpine? Alpine es el sistema operativo (basado en linux) de nuestra imagen. Este nombre es famoso porque representa una imagen con un peso mínimo de mega bytes , y esto se busca para que tu contenedor final no pese mucho, ya que no conviene mucho tener tu aplicación de 50mb y que tu imagen base pese 250 mb.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workdir
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /usr/src/app&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El WORKDIR indica el directorio de trabajo, nos referimos a el como un directorio que se crea dentro del contenedor que se usará como base para correr los comandos consecuentes.&lt;/p&gt;

&lt;p&gt;Entonces conocemos que el workdir se refiere más a nuestro contenedor que a tu aplicación por eso verás que en muchos lugares se le conoce como /app, si tu aplicación usa sus archivos en src/, nada de preocupaciones, recuerda que se habla del contenedor y no tanto de tu aplicación, esto vendrá en los próximos comandos.&lt;/p&gt;

&lt;h2&gt;
  
  
  COPY
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los comandos COPY, hacen honor a su nombre de copiar los archivos de tu aplicación a la del contenedor /app.&lt;/p&gt;

&lt;p&gt;Primero copiamos el package.json porque de allí correremos comandos npm.&lt;/p&gt;

&lt;p&gt;Luego empleamos el COPY . . &lt;/p&gt;

&lt;p&gt;Admito que esto no es muy explicativo pero básicamente es copiar lo de tu directorio al directorio de trabajo (WORKDIR) el que ya habíamos específicado anteriormente. &lt;/p&gt;

&lt;p&gt;Podríamos traducir a COPY . /app&lt;/p&gt;

&lt;p&gt;El WORKDIR indica el directorio de trabajo, nos referimos a el como un directorio que se crea dentro del contenedor que se usará como base para correr los comandos consecuentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  RUN
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este puede aparecer bastante en el desarrollo de una aplicación, y hace lo que su nombre, corre en tu contenedor lo que le pongas a su izquierda así de simple.&lt;/p&gt;

&lt;p&gt;Usualmente cuando agarras una aplicación , lo primero que haces es instalar las dependencias porque sino la aplicación no corre, esto es un clásico. Bueno en docker sucede similar, corre el npm install que harías normalmente. Sobre el set progress=false es para que no meustre la barra de progreso al instalar dependencias , el &amp;amp;&amp;amp; une comandos por lo que le coloco npm install.&lt;/p&gt;

&lt;h2&gt;
  
  
  EXPOSE
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8086&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;EXPOSE sirve para decir que el puerto que tu contenedor usará. &lt;/p&gt;

&lt;p&gt;Aquí está el dilema y es que colocarlo no hará efecto a la hora de correr el contenedor, entonces esto sirve más de documentación. Lee sobre como correr un contenedor&lt;/p&gt;

&lt;p&gt;En mi opinión está bien colocarlo porque la documentación es muy importante pero es bueno tener en cuenta que su utilidad es esa y a la hora de correrlo no esperar que abra en ese puerto por defecto.&lt;/p&gt;

&lt;h2&gt;
  
  
  CMD
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "run", "storybook"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CMD es la consola que corre el comando que coloques entre sus corchetes, esto sucederá cuando se termine de correr el contenedor.&lt;/p&gt;

&lt;p&gt;Quizá al final de la construcción de la imagen no se ejecute pero su función se realizará al final de correr el contenedor y no la construcción.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recapitulando
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;
&lt;span class="c"&gt;# Usar una imagen  &lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:current-alpine3.14&lt;/span&gt;

&lt;span class="c"&gt;# Establecer el directorio de trabajo de nuestro contenedor&lt;/span&gt;
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /usr/src/app&lt;/span&gt;

&lt;span class="c"&gt;# Copiar el package.json a la carpeta /app de nuestro contenedor&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json /app&lt;/span&gt;

&lt;span class="c"&gt;# Copiará otros archivos de la aplicación&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="c"&gt;# Ejecutar el comando npm set progress=false &amp;amp;&amp;amp; npm install&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;progress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="c"&gt;# Exponer el puerto 8086 de el contenedor docker, fin de documentación&lt;/span&gt;
&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 8086&lt;/span&gt;

&lt;span class="c"&gt;# Correrá este comando al final cuando se esté corriendo el contenedor&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "run", "storybook"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Finalizando
&lt;/h2&gt;

&lt;p&gt;Al final de todo esto recuerda que puedes ejecutar el comando &lt;code&gt;docker build -t aplicacion-docker .&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-t&lt;/code&gt; significa que colocarás un tag que vendría a ser un nombre, aquí no puedes usar letras mayúsculas así que separo con un guión.&lt;/p&gt;

&lt;p&gt;El &lt;code&gt;.&lt;/code&gt; al final significa que buscará dentro de la carpeta un Dockerfile y lo leerá para crear una imagen a partir de las instrucciones, si abres la terminal desde otra carpeta y quieres correr el comando debes sustituir ese punto con la ubicación de el Dockerfile, lo mismo sucede si tienes más de un Dockerfile en tu aplicación pero esto es algo que no suele suceder.&lt;/p&gt;

&lt;p&gt;También quiero destacar que tu archivo se debe llamar Dockerfile, si le llamas DockerFile, u otro nombre te mandará error, este es un error frecuente también, recuerda Dockerfile.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>frontend</category>
      <category>github</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
