Node.js Best Practices — Project and Async
Tags: node, webdev, programming, javascript
Published: 2021-01-23 20:50:09

**Check out my books on Amazon at https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62**

**Subscribe to my email list now at http://jauyeung.net/subscribe/**

Like any kind of apps, JavaScript apps also have to be written well.

Otherwise, we run into all kinds of issues later on.

In this article, we’ll look at some best practices we should follow when writing Node apps.

### Start All Projects with `npm init`

We should start will project with `npm init` so that we get the `package.json` file in our app project.

This will let us add our project’s metadata like the project name, version, and the required packages.

### Setup `.npmrc`

We should add `.npmrc` to add the URL for the Node packages repositories that we’ve to use outside the regular NPM repository.

Also, we can make the version of the package the same for everyone.

To make everyone use the same version, we can write.

```
npm config set save=true
npm config set save-exact=true
```

We make `npm install` also install the same version.

`package-lock.json` also locks the repositories to the same version.

### Add Scripts to Our `package.json`

`package.json` can hold project-related scripts.

They’re all in the `scripts` folder.

This way, we can just have one command to do everything to start the project.

We can add a `start` script to our project with `npm start` .

For example, we can write:

```
"scripts": {
  "start": "node app.js"
}
```

Then just run `npm start` to run our app instead of `node app.js` .

Also, we can add more commands:

```
"scripts": {
  "postinstall": "bower install && grunt build",
  "start": "node app.js",
  "test": "node ./node_modules/jasmine/bin/jasmine.js"
}
```

`postinstall` runs after the packages in `package.json` are installed.

`npm test` runs the `test` script which runs the tests.

This lets us run tests without typing in multiple commands ourselves.

We can also add custom scripts into `package.json` .

We can run them with `npm run script {name}` where `name` is the key of the script.

### Use Environment Variables

We should set environment variables for things that run in different environments.

For example, we can use the dotenv library to read them from an `.env` file or environment variables so we can use them in our app.

They can be accessed with `process.env` in our Node app.

### Use a Style Guide

If we adopt styles in a style guide, then we write our code in a consistent style.

Having consistent code makes it easier to understand.

We can make the checks automatic with linters like ESLint.

It contains rules for Node apps built-in.

Other style guides include:

*   Airbnb — [https://github.com/airbnb/javascript](https://github.com/airbnb/javascript)
*   Google — [https://google.github.io/styleguide/javascriptguide.xml](https://google.github.io/styleguide/javascriptguide.xml)
*   jQuery — [https://contribute.jquery.org/style-guide/js/](https://contribute.jquery.org/style-guide/js/)
*   Standard JS — [http://standardjs.com/](http://standardjs.com/)

### Embrace async

We got to use async code with Node apps.

This way, they won’t hold up the whole app while waiting for something to complete.

To make our lives easier, we can use promises to write our async code.

To make them shorter, we can use async and await.

We can convert some Node async callbacks to promises with the `util` module.

Some modules like `fs` also have versions of its methods that return promises.

### Conclusion

We should take full advantage of the features provided by `package.json` and the `npm` program.

Also, we should use async wherever we can.

A consistent coding style is also good.