Five conductive - and five innovative npm packages
Published: 2021-05-15 12:33:46

You probably know those npm package mentioned in every other article, such as `express`, `axios` and `nodemon` . Each of them provides great ease of usage through their docs and offers a great developer experience. But so do others. The collection I'd like to share with you includes five useful packages for everyday development that just work, as well as five innovative ones that show a lot of promise and enhance your application with modern features.

1) Conductive and reliable
--------------------------

### 1.1) [Formidable - a form-data parser](https://www.npmjs.com/package/formidable)

Node.js backends don't come with builtin form - or body parsers. If you'd like to implement a feature such as file uploading, you're either bound to write that code yourself or use a library that does the heavy lifting for you. And while [multer](https://www.npmjs.com/package/multer) provides a similar functionality at a smaller size, formidable, not being a middleware, can be used more dynamically in bigger backend applications.

### 1.2) [Knex - an SQL query builder](https://www.npmjs.com/package/knex)


Writing SQL queries in Javascript can be puzzling, especially if you're used to document-oriented databases most of the time. Knex won't save you the effort to understand SQL syntax, but it will surely make your life easier by composing a query string out of several chained Javascript methods. It's  The package has a solid documentation, is easy to pick up and compatible with all major Node SQL drivers.

Consider this sample code to get an idea of how it works:

```javascript
const customer_id = 101;

knex('customers')
  .where({ customer_id: id })
  .select('customer_name')

// -> Resolves to 
// SELECT customer_name FROM customers WHERE customer_id = 101;
```

### 1.3) [Sharp - a performant image converter](https://www.npmjs.com/package/sharp)

Sharp uses libvips under the hood, an image library written in C that embraces async processing. If you have ever looked for a package that does image conversion in a nice and accurate manner, this package might be right for you.

A simple use case would be to put it before a module that handles an image database and automatically create several image sizes. Or just make sure your user's avatar remains at a reasonable size, in case they upload a 4k\*4k behemoth.

### 1.4) [Puppeteer - a headless Chromium browser](https://www.npmjs.com/package/puppeteer)

The package's function in a nutshell:

> Most things that you can do manually in the browser can be done using Puppeteer!

It can be used only for automated form submission or taking screenshots, and just as well for automated tasks. If you're looking for an all-in-one solution, you might be after Puppeteer. It aids you with:

*   Automated form submission, to simulate end-to-end data transfer (or to cheat on your mobile office time report)
*   Taking screenshots from an article you enjoyed and would like to savekeep
*   Web scraping, if you're a data scientist or work in a data driven team\*,
*   Performance tests, if you're after a good lighthouse score.

\* Be sure to not cross legal borders. [Read on here](https://www.tutorialspoint.com/python_web_scraping/legality_of_python_web_scraping.htm) to learn about scraping the www

### 1.5) [GSAP - a powerful animation toolkit](https://www.npmjs.com/package/gsap)

I stumbled across this gem while studying to improve my Vue.js frontend skills. As somebody who's generally having a hard time to properly design UIs, I was flabbergasted what difference a few lines of GSAP powered code can do. It's performant and well documented. What really won me over is their [cheatsheet](https://greensock.com/cheatsheet/) and its backlinks though.

Note that you might have to [buy a license](https://greensock.com/standard-license/) to use this package for subscription based products

2) Innovative and shiny
-----------------------

### 2.1) [Bent - a next-gen http - client](https://www.npmjs.com/package/bent)

NPM's [request](https://www.npmjs.com/package/request) and [axios](https://www.npmjs.com/package/axios) are still the most common and mature top-dog clients, but new challengers are emerging - one of which is the bent package. It consists out of less than 15% of the above packages' size, and embraces modern Javascript practices. As it's fully asynchronous, it only works in an async context.

```javascript
(async function () {
  const bent = require("bent")
  const getJson = bent('json')
  const res = await getJson('https://jsonplaceholder.typicode.com/todos')
  console.log(res)
})()
```

### 2.2) [Tessaract.js - an Optical Character Recognition Library](https://www.npmjs.com/package/tesseract.js)

While [OCR](https://en.wikipedia.org/wiki/Optical_character_recognition) is not the big deal it was a few years ago, the fact that it can be done from inside your browser still looks rather futuristic. If you're worried about synchronous code execution: The main library spawns a worker for each recognition process, making use of the non-blocking event loop magic. Possible appliances could be:

*   Fulltext search for one or more uploaded document files.
*   Text extraction for natural language processing.
*   A combination with [navigator.mediaDevices](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices) - & a device's camera to extract words straight from notes on paper.

### 2.3) [Storybook - a platform for your project components](https://storybook.js.org/)

If you're a React frontend engineer, it's likely you've at least heard of Storybook. It's less of a single npm package, but more of a tool to develop components in an isolated environment and thereby make them reusable. The [Brave Browser Storybook](https://brave.github.io/brave-ui/?path=/story/components--button) illustrates the usefulness of this tool very well

### 2.4) [Prisma - a toolkit for rapid ORM database development](https://www.npmjs.com/package/prisma)


If you've seen Knex in the upper section and thought: No way I'll give up my NoSQL or GraphQL way or writing queries - this module means good news. Prisma uses its own `.prisma` filetype to declare its schemata. The way these can be used to query data looks a lot like the MongoDB's [Mongoose](https://www.npmjs.com/package/mongoose). While being relatively big in size, it offers a bunch of useful interfaces and tools for fast prototyping, migration and development.

### 2.5) [GramJS - a telegram client for you and your bots](https://www.npmjs.com/package/telegram)

Like OCR, chatbots are far away from being futuristic features restricted to a few tech geeks. Quite the opposite - messaging services such as telegram embrace them and even expose whole interfaces for you to work with. This library is not required to do so, but using it requires less boilerplace than writing all API methods from scratch.

The use cases here also are endless. One which I've liked was [How I got a Nintendo Switch using NodeJS](https://dev.to/rgthree/how-i-got-a-nintendo-switch-using-nodejs-2eab), where the author automatically got notified when the price of the console dropped on amazon.

What else?
----------

There's plenty of other gems out there (like I stumbled across [Vibrant](https://www.npmjs.com/package/node-vibrant) the other day). And while you should be picky with what your projects depend on, including rather new and innovative packages could end up being that feature to peak out from the mass.
> This post was originally published at https://q-bit.me/ten-npm-packages-to-refine-your-everyday-work/
Thank you for reading. If you enjoyed this article, let's stay in touch on Twitter 🐤 [@qbitme](https://twitter.com/qbitme)