Remove unnecessary files in node_modules

As the meme goes, the object with the largest mass in our universe is the
node_modules directory.

Generally speaking, storage is cheap, and while an unkept set of dependencies
can be quite messy (and often times a security hazard), the size of your
node_modules directory tends to not be of major concern.

That said, if you’re working with a fixed-storage environment, like that of an
AWS Lambda, the size of your dependencies can impact your ability to deploy new
code.

On different occasions, I’ve attempted to throw some shell scripting at the
problem, removing files that I know to be unnecessary for my project. Some of
those file types and patterns include:

  • Markdown files:
    • *.md
    • *.mkd
    • *.markdown
  • READMEs
    • *readme*
  • LICENSEs:
    • *license
    • license-*
  • Documentation and examples:
    • doc
    • docs
    • example
    • examples
  • Tests and test coverage:
    • test
    • tests
    • coverage
    • *-spec.*
    • *.spec.*
    • *-test.*
    • *.test.*
  • Archives:
    • *.zip
    • *.tgz
    • *.tar.gz
  • Hidden files and directories:
    • .*
  • Build files and configurations:
    • makefile,
    • gulpfile.js
    • gruntfile.js
    • karma.conf.js
    • tslint.json
    • *eslintrc.*
  • Source files:
    • *.c
    • *.cpp
    • *.h
  • TypeScript files:
    • *.ts
    • tsconfig.json
  • Pre-build distributions:
    • aws-sdk/dist*
    • react-native

This list has served me well, but it’s limited to my own observations about
which files are unnecessary for my projects. At the end of the day, the list is
far from exhaustive, quite finite, and probably doesn’t change as often as it
should.

Like most problems out there, fortunately somebody else has attempted to solve
it, none other than TJ Holowaychuk.

The project I’m speaking of is node-prune.

Even though it’s a Node.js centric tool, it’s actually written in Golang and
does require go to be installed to run.

To get things installed, simply run:

go install github.com/tj/node-prune@latest

And from your project’s directory (where you should have node_modules) you can
run:

node-prune

Or tell node-prune where the node_modules you’d like to prune are:

node-prune ./path/to/node_modules

You will then be greeted with some friendly output letting you know how many
files were analyzed, how many files were removed, how much space was recovered
and how much time it took!

Josh Sherman - The Man, The Myth, The Avatar

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.


If you found this article helpful, please consider buying me a coffee.