Kissing JavaScript #2 globals.js
Tags: javascript
Published: 2020-03-23 08:14:26

Have you ever asked why you must type
```JavaScript
const { readFileSync } = require('fs')
```
every time you need to read a file or use any other file handling function?

In my DRY obsession, this bothers me a lot. To me, the first requirement to write simpler code is just write less code. 

One of my strategies to avoid the repetition is the use of global variables. 

In [first post](https://dev.to/bittnkr/kissing-javascript-1174) of this series, there was a part of code I didn't commented about:

```JavaScript
if (typeof window == 'object') 
  window.test = test
else global.test = test
```
This code makes the `test()` function globally available, (in nodejs and in the browser) so I only need to require the file once for the entire application.

Traditionally (before ES6) if you write`x = 10` not preceded by `var` or `const`, that variable will automatically become a global variable. 

Having an accidental global variable is a bad thing because that variable can replace another with the same name declared in another part or library or simply leak the function scope.

For this reason, ES6 introduced the `"use strict";` directive. One of the things this mode do is disallow global variables by default.

After that, most of the libraries avoided using global variables to not pollute the global space. 

So, I've a good news to you: 

Now the global space is almost desert and is free to be used at will by you. Yes **you** are the owner of global space now, and you can use it to make you life simpler.

So my second tip is just this: Create a file named `globals.js` and put on it everything you want to have always at hand.

Follow a model with part of my `globals.js`, with some ideas of nice globals:

```JavaScript
// check if the fs variable already exists in the global space, if so, just returns
if (global.fs) return 

// a shortcut for the rest for the file
var g = (typeof window == 'object') ? window : global

g.fs = require('fs')
g.fs.path = require('path') // make path part of fs

g.json = JSON.stringify
g.json.parse = JSON.parse

// from the previous article
g.test = require('./test.js') 

// plus whatever you want always available
```
Now just put in the main file of your NodeJS project, the line 

```JavaScript
require('./globals.js')
```
and after that in anywhere of your project when you need a function of `fs` module, you just need to type:

```JavaScript
var cfg = fs.readFileSync('cfg.json')
```
without any require(). 

I know this is not the most complex or genial article you have ever read on here dev.to, but I'm sure the wise use of global space can save you a lot of typing.

A last word: 

In this time of so many bad news, I want to give you another little tip: Turn off the TV, and give a tender kiss in someone you love and loves you (despite the distancing propaganda we are bombarded). Say her how important she is to you life and how you would miss if she is gone. (The same to him)  

I my own life, every time I faced death I realized that the most important and the only thing that really matters and we will carry with our souls to the after life is the love we cultivate.

So, I wish you a life with lot of kisses and love.

From my heart to your all. 😘