<?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: Christopher Daniel</title>
    <description>The latest articles on DEV Community by Christopher Daniel (@swellguycris).</description>
    <link>https://dev.to/swellguycris</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%2F48622%2F8ea7f9d5-6b9b-4a80-9614-23f46ce80dcb.jpg</url>
      <title>DEV Community: Christopher Daniel</title>
      <link>https://dev.to/swellguycris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/swellguycris"/>
    <language>en</language>
    <item>
      <title>Accessing Environment Variables in an Easier Way</title>
      <dc:creator>Christopher Daniel</dc:creator>
      <pubDate>Tue, 15 Jun 2021 01:45:26 +0000</pubDate>
      <link>https://dev.to/swellguycris/accessing-environment-variables-in-a-better-way-3ol8</link>
      <guid>https://dev.to/swellguycris/accessing-environment-variables-in-a-better-way-3ol8</guid>
      <description>&lt;p&gt;In server-side development, it's extremely common to access variables from the execution environment. &lt;/p&gt;

&lt;p&gt;In this post, I hope to convince you to consolidate access of these variables into one single-file (&lt;strong&gt;or&lt;/strong&gt; a more structured way of accessing these values) to make it easier to refactor, maintain, and update as your project grows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Logging to console the stage we're on&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`This is the &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why is it useful to access variables from the environment?
&lt;/h2&gt;

&lt;p&gt;I won't dive too much into the &lt;strong&gt;why&lt;/strong&gt; of this, but you typically access sensitive values via this way, such as&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API keys and secrets&lt;/li&gt;
&lt;li&gt;Application identifiers&lt;/li&gt;
&lt;li&gt;Stage of the environment (looking at you &lt;code&gt;NODE_ENV&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;JSON Web Token key&lt;/li&gt;
&lt;li&gt;Database access credentials&lt;/li&gt;
&lt;li&gt;other top-secret values of this nature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are values that you &lt;strong&gt;do not want committed to a version control system like GitHub&lt;/strong&gt; and so you keep them out of there for security purposes. &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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8s6vnqmvq7qdx13kyqs.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm8s6vnqmvq7qdx13kyqs.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might also keep these out of there because these vary from stage to stage, and thus makes no sense to keep in GitHub. &lt;/p&gt;

&lt;p&gt;So, getting them during runtime of the program it is! 😃&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the issue with process.env?
&lt;/h2&gt;

&lt;p&gt;In your own projects, you might be accessing environment variables through &lt;code&gt;process.env.MY_VARIABLE&lt;/code&gt;. This is great! It's fine, and it works.&lt;/p&gt;

&lt;p&gt;But is it optimal? &lt;/p&gt;

&lt;p&gt;Imagine you have two files that access the same environment variable, some sort of API key&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Usage 1&lt;/span&gt;
&lt;span class="nf"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&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;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CMS_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/random-endpoint-1`&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="s2"&gt;`
  header: `&lt;/span&gt;&lt;span class="nx"&gt;Bearer&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MY_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`
});

// ...

// Usage 2
axios({
  url: `&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CMS_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="sr"&gt;/random-endpoint-1`/&lt;/span&gt;&lt;span class="nx"&gt;v1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;random&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="s2"&gt;`
  header: `&lt;/span&gt;&lt;span class="nx"&gt;Bearer&lt;/span&gt; &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MY_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`
});

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

&lt;/div&gt;



&lt;p&gt;Both of these files are accessing the same API key from the environment directly. Now imagine your projects expands in scale and you have many more instances where this API key needs to be accessed.&lt;/p&gt;

&lt;p&gt;See the problem that might occur? You now would &lt;code&gt;process.env.MY_API_KEY&lt;/code&gt; littered throughout your project.&lt;/p&gt;

&lt;p&gt;What if you need to change the environment variable from &lt;code&gt;process.env.MY_API_KEY&lt;/code&gt; to &lt;code&gt;process.env.TWITTER_API_KEY&lt;/code&gt;? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yes, you can easily rename all instances (using a powerful editor like VS Code). But this is going to cause a pretty large commit created for this simple change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What if you have a plethora environment variables, and you want to group them? Like API credentials, database credentials, etc.?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There's no way to do this with the normal &lt;code&gt;process.env.XXX_YYY&lt;/code&gt; usage. Everything is at the same level and there's no grouping them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What if you want to add context to each environment variable, so engineers can understand what purpose they serve?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can do this in your &lt;code&gt;.env.template&lt;/code&gt; file as single-line comments, but this won't show up in the IDE as a hint or documentation for your team members.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How should we be accessing the environment variables?
&lt;/h2&gt;

&lt;p&gt;I won't say you 100% definitively, absolutely, should follow my advice. But I think it can help prevent the above shortcomings (and also &lt;strong&gt;add to&lt;/strong&gt; your current environment variable usage).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add a &lt;code&gt;config.js&lt;/code&gt; or &lt;code&gt;config.ts&lt;/code&gt; file!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What do I mean? &lt;/p&gt;

&lt;p&gt;I mean consolidate access of environment variables from using &lt;code&gt;process.env.XXX_YYY&lt;/code&gt; everywhere, to just accessing it once! Through a single file(s)!&lt;/p&gt;

&lt;p&gt;It can look something like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;cmsUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CMS_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="na"&gt;dbHost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_HOST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dbUser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_USER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dbPassword&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="na"&gt;jwtSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ZEROCHASS_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="na"&gt;awsRegion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_REGION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;awsBucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_BUCKET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="na"&gt;twitterApiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TWITTER_API_KEY&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;Now, whenever I want to access &lt;strong&gt;any&lt;/strong&gt; of these environment variables, I can do so by importing this file. &lt;/p&gt;

&lt;p&gt;No more having to write &lt;code&gt;process.env.MY_VARIABLE&lt;/code&gt; over and over!&lt;/p&gt;

&lt;p&gt;My above example with axios becomes this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Config&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;./config&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Usage 1&lt;/span&gt;
&lt;span class="nf"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&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;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cmsUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/random-endpoint-1`&lt;/span&gt;
  &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;twitterApiKey&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="c1"&gt;// ...&lt;/span&gt;

&lt;span class="c1"&gt;// Usage 2&lt;/span&gt;
&lt;span class="nf"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;url&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;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cmsUrl&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/random-endpoint-2`&lt;/span&gt;
  &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;twitterApiKey&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If I ever need to change the environment variable that the Twitter API key was stored in, I don't have to change a zillion files, I just change it here in &lt;code&gt;config.ts&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;If I need to add documentation and group items, I can easily add it here.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="na"&gt;general&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="cm"&gt;/** The URL for our Craft environment */&lt;/span&gt;
      &lt;span class="na"&gt;cmsUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_CRAFT_CMS_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="na"&gt;jwtSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ZEROCHASS_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="cm"&gt;/** The stage we're on, should be QA/Dev/Prod */&lt;/span&gt;
      &lt;span class="na"&gt;nodeEnv&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_HOST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_USER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_PASSWORD&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DB_NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="na"&gt;aws&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_REGION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AWS_BUCKET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="na"&gt;twitter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

      &lt;span class="cm"&gt;/** API v1 URL for Twitter */&lt;/span&gt;
      &lt;span class="na"&gt;apiUrl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TWITTER_API_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

      &lt;span class="cm"&gt;/** API key for our Twitter app */&lt;/span&gt;
      &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;TWITTER_API_KEY&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;And anyone who imports this file will get all that context, including the code hints on hover!&lt;/p&gt;

&lt;p&gt;Hopefully this short post has given you some insight on how you might rethink your environment variable usage. You can even throw in some value-validation here, but I won't cover that here.&lt;/p&gt;

&lt;p&gt;Let me know your thoughts!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>node</category>
      <category>express</category>
      <category>serverside</category>
    </item>
    <item>
      <title>Add some color to your profile picture! 🎨 </title>
      <dc:creator>Christopher Daniel</dc:creator>
      <pubDate>Sat, 05 Jun 2021 16:48:14 +0000</pubDate>
      <link>https://dev.to/swellguycris/add-some-color-to-your-profile-picture-23k3</link>
      <guid>https://dev.to/swellguycris/add-some-color-to-your-profile-picture-23k3</guid>
      <description>&lt;p&gt;Hey all! The Twitter community is a great place to find and interact with folks from all over on shared passions and interests.&lt;/p&gt;

&lt;p&gt;Most recently, I've been way more active on Twitter and becoming a more active part of the developer community. &lt;/p&gt;

&lt;p&gt;It's been an awesome time sharing knowledge and building in public along with learning from what others have to say. &lt;/p&gt;

&lt;p&gt;One thing that can help with others recognizing you and your content is making your profile stand out a bit. &lt;/p&gt;

&lt;p&gt;There's a million people online and standing out can help with people remembering who you are and what type of content you tend to put out.&lt;/p&gt;

&lt;p&gt;With all that said, &lt;strong&gt;adding a nice and eye-catching color to your profile picture&lt;/strong&gt; can really add some pizazz to your profile picture! Regardless of where you're using it (except LinkedIn, where your mileage may very 🙂).&lt;/p&gt;

&lt;h2&gt;
  
  
  Profile Picture Maker
&lt;/h2&gt;

&lt;p&gt;This is the main step of creating your very own profile picture with a colored background. &lt;a href="https://pfpmaker.com/"&gt;Profile Picture Maker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most of the time, this app will work without a hit, and you'll get some awesome different styles for your profile picture. &lt;/p&gt;

&lt;p&gt;In the below example, I've uploaded a picture of Justin Timberlake. &lt;/p&gt;

&lt;p&gt;You can even select from a multitude of colors for your background.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m8_MmMb7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/11875l3zqe2vftulwar3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m8_MmMb7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/11875l3zqe2vftulwar3.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After uploading your profile picture, it just takes a few second to generate your different pictures.&lt;/p&gt;

&lt;p&gt;See the neat results below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F1LWyYNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5nbt80qrqkn9dqmc1f3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F1LWyYNx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d5nbt80qrqkn9dqmc1f3.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you've picked your favorite, you're good to go with uploading it to Twitter, Facebook, or wherever you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  If Profile Picture Maker isn't working for you
&lt;/h2&gt;

&lt;p&gt;Sometimes, Profile Picture Maker might not colorize &lt;strong&gt;your entire background&lt;/strong&gt;, or it might colorize something that &lt;strong&gt;isn't your background&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This was the case for me, where my white hat was being seen as part of the background and so was being colorized as part of the background-coloring process.&lt;/p&gt;

&lt;p&gt;In comes &lt;a href="https://photoscissors.com/"&gt;Photo Scissors&lt;/a&gt; to the rescue! You can use this app to manually crop out the background from your profile picture.&lt;/p&gt;

&lt;p&gt;In doing so, only the transparent background will be left, which will be easy for Profile Picture Maker to identify and colorize properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And that's it!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hopefully you've found some value from this post and can make your profile picture a nice and unique color for others to see and recognize.&lt;/p&gt;

&lt;p&gt;Until next time!&lt;/p&gt;

</description>
      <category>twitter</category>
      <category>tech</category>
      <category>socialmedia</category>
    </item>
  </channel>
</rss>
