# an opinionated list of essential Node.js global packages

When Javascript came on the scene in 1995, it was meant to be used as a scripting language for Web pages. However, we all know that it's use has gone way past that, and even if you are not a web developer, there are very high chances that you use tools built on top of Javascript, particularly [Node.js](https://nodejs.org/) based tools in your dev workflow.

In this post, I present a list of Node.js tools that I generally depend on, and always ensure that they are [installed globally](https://docs.npmjs.com/downloading-and-installing-packages-globally) on my development machine. So, without further ado, here we go ...

### Web development 🌐

- [`@vue/cli`](https://cli.vuejs.org/) – Standard Tooling for [Vue.js](https://vuejs.org/) Development
- [`@vue/cli-init`](https://www.npmjs.com/package/@vue/cli-init) – `vue init` command addon for `@vue/cli`. This is an alias to the old `vue-cli@2.x`.
- [`browser-sync`](https://browsersync.io/) – Keep multiple browsers & devices in sync when building websites.
- [`caniuse-cmd`](https://www.npmjs.com/package/caniuse-cmd) – a [caniuse.com](https://caniuse.com/) command line tool
- [`concurrently`](https://github.com/open-cli-tools/concurrently) – Run multiple commands concurrently. I typically use this to simultaneously run the [Django dev server](https://docs.djangoproject.com/en/3.2/ref/django-admin/#runserver), [gulp](https://gulpjs.com/) and [maildev](https://github.com/maildev/maildev).
- [`clean-css-cli`](https://www.npmjs.com/package/clean-css-cli) – a command-line interface to [clean-css](https://github.com/clean-css/clean-css) - fast and efficient CSS optimizer for Node.js.
- [`express-generator`](https://expressjs.com/en/starter/generator.html) – [Express](https://expressjs.com/) application generator tool,
- [`firebase-tools`](https://www.npmjs.com/package/firebase-tools) – Firebase CLI Tools for testing, managing, and deploying your [Firebase](https://firebase.google.com) project from the command line
- [`grunt-cli`](https://gruntjs.com/) – JavaScript Task Runner. I have a couple of old projects that use Grunt, but I have since transitioned to Gulp, which seems to be more actively maintained and has wider plugin support.
- [`gulp-cli`](https://gulpjs.com/) – A toolkit to automate & enhance your workflow.
- [`html-minifier`](https://www.npmjs.com/package/html-minifier) – a highly configurable, well-tested, JavaScript-based HTML minifier.
- [`lerna`](https://lerna.js.org/) – A tool for managing JavaScript projects with multiple packages.
- [`lite-server`](https://www.npmjs.com/package/lite-server) – Lightweight *development only* node server that serves a web app, opens it in the browser, refreshes when html or Javascript change, injects CSS changes using sockets, and has a fallback page when a route is not found
- [`local-cors-proxy`](https://www.npmjs.com/package/local-cors-proxy) – Simple proxy to bypass CORS issues. This was built as a local dev only solution to enable prototyping against existing APIs without having to worry about CORS.
- [`maildev`](https://github.com/maildev/maildev) – SMTP Server + Web Interface for viewing and testing emails during development. 
- [`nodemon`](https://www.npmjs.com/package/nodemon) – a tool that helps develop Node.js based applications by automatically restarting the node application when file changes in the directory are detected.
- [`parcel-bundler`](https://parceljs.org/) – Blazing fast, zero configuration web application bundler
- [`pm2`](https://www.npmjs.com/package/pm2) – a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.
- [`prettier`](https://prettier.io/) – an opinionated code formatter
- [`sass`](https://sass-lang.com/) – CSS with superpowers
- [`serve`](https://www.npmjs.com/package/serve) – Static file serving and directory listing 
- [`typescript`](https://www.typescriptlang.org/) – JavaScript with syntax for types.
- [`uglify-js`](https://www.npmjs.com/package/uglify-js) – a JavaScript parser, minifier, compressor and beautifier toolkit.

### Mobile app development 📱

- [`@ionic/cli`](https://ionicframework.com/docs/cli) – command-line interface for developing [Ionic](ttps://ionicframework.com) apps.
- [`@quasar/cli`](https://quasar.dev/quasar-cli/installation) – I've placed Quasar under the **mobile app development** category because that's what I've used it for. However, it is a multi-purpose tool. In fact, Quasar’s motto is: “**write code once and simultaneously deploy** it as a website, a Mobile App and/or an Electron App”.
- [`@quasar/icongenie`](https://quasar.dev/icongenie/introduction) – outputs a set of **SQUARE** favicons, webicons, pwa-icons and electron-icons as well as iOS, Windows Store and MacOS icons from an original 1240x1240 square icon that retains transparency and also **minifies** the assets. It will also create splash screens for Cordova/[Capacitor](https://capacitorjs.com/) and even a minified svg.
- [`cordova`](https://cordova.apache.org/) – an open-source mobile development framework which allows you to use standard web technologies (HTML5, CSS3, and JavaScript) for cross-platform development.
- [`nativescript`](https://nativescript.org/) – access native APIs from JavaScript directly. The framework provides iOS and Android runtimes for rich mobile development.

### Git repository management 💻

- [`commitizen`](https://github.com/commitizen/cz-cli) – Simple commit conventions for internet citizens
- [`conventional-changelog-cli`](https://www.npmjs.com/package/conventional-changelog-cli) – Generate a changelog from git metadata
- [`dependabot-config-generator`](https://www.npmjs.com/package/dependabot-config-generator) – CLI tool for [Dependabot config](https://dependabot.com/docs/config-file/) generate
- [`standard-version`](https://www.npmjs.com/package/standard-version) – A utility for versioning using [semver](https://semver.org/) and CHANGELOG generation powered by [Conventional Commits](https://conventionalcommits.org/).

### Screen recording / terminal capture 📹

- [`asciicast2gif`](https://www.npmjs.com/package/asciicast2gif) – a tool for generating GIF animations from [asciicast](https://github.com/asciinema/asciinema/blob/master/doc/asciicast-v1.md) files recorded by [asciinema](https://github.com/asciinema/asciinema).
- [`gifify`](https://www.npmjs.com/package/gifify) – Convert any video file to an optimized animated GIF. This tool is no longer maintained, so I've switched to [`gifski`](https://github.com/ImageOptim/gifski), a [Rust](https://www.rust-lang.org/install.html)-based GIF encoder based on [`libimagequant`](https://pngquant.org/lib/)
- [`svg-term-cli`](https://www.npmjs.com/package/svg-term-cli) – Share terminal sessions as razor-sharp animated SVG everywhere.
- [`terminalizer`](https://github.com/faressoft/terminalizer) – Record your terminal and generate animated gif images or share a web player.

### Document processing / conversion 🗎

- [`doctoc`](https://www.npmjs.com/package/doctoc) – Generates table of contents for markdown files inside local git repository.
- [`mdpdf`](https://www.npmjs.com/package/mdpdf) – A command line markdown to pdf converter with support for page headers, footers, and custom stylesheets. Mdpdf is incredibly configurable and has a JavaScript API for more extravogant usage.
- [`puppeteer-pdf`](https://www.npmjs.com/package/puppeteer-pdf) – HTML to PDF from the command line with [Puppeteer](https://pptr.dev/)

### CV / Resume generation 📃

- [`fluentcv`](https://github.com/fluentdesk/FluentCV) – a dev-friendly, local-only Swiss Army knife for resumes and CVs. It is the corporate-friendly fork of [HackMyResume](https://github.com/hacksalot/hackmyresume).
- [`hackmyresume`](https://www.npmjs.com/package/hackmyresume) – Create polished résumés and CVs in multiple formats from your command line or shell. Author in clean Markdown and JSON, export to Word, HTML, PDF, LaTeX, plain text, and other arbitrary formats

### Image compression 🖻

- [`imagemin-cli`](https://www.npmjs.com/package/imagemin-cli) – Minify images seamlessly
- [`imagemin-advpng`](https://github.com/imagemin/imagemin-advpng) – [AdvPNG](https://www.advancemame.it/doc-advpng.html) plugin for imagemin 
- [`imagemin-jpegtran`](https://github.com/imagemin/imagemin-jpegtran) – [jpegtran](https://jpegclub.org/jpegtran/) plugin for imagemin
- [`imagemin-mozjpeg`](https://github.com/imagemin/imagemin-mozjpeg) – Imagemin plugin for mozjpeg
- [`imagemin-optipng`](https://github.com/imagemin/imagemin-optipng) – [optipng](http://optipng.sourceforge.net/) plugin for imagemin
- [`imagemin-pngcrush`](https://github.com/imagemin/imagemin-pngcrush) – [pngcrush](https://pmt.sourceforge.io/pngcrush/) plugin for imagemin
- [`imagemin-pngquant`](https://github.com/imagemin/imagemin-pngquant) – Imagemin plugin for `pngquant`
- [`mozjpeg`](https://www.npmjs.com/package/mozjpeg) – a production-quality JPEG encoder that improves compression while maintaining compatibility with the vast majority of deployed decoders
- [`svgo`](https://github.com/svg/svgo) – Node.js tool for optimizing SVG files. I often also use a similar Python tool called [Scour](https://github.com/scour-project/scour). I'd run both tools on one file and get the smaller resulting file!

Well, there you have it! What Node.js tools do you regularly use that aren't on this list? Do you have alternatives to some of the tools I've listed? Well, let me know in the comments below 🙂.
