Whoever had the idea of applying a package management paradigm to software libraries for the sake of development deserves some kind of award. Was RubyGems the first example of such a system? I’m not sure.
The most common complaint I hear about NPM and the micro-libraries contained within is some kind of puritanical, ascetic diatribe coupled with a kids-these-days attitude.
Well, as a matter of fact, I could write my own left-pad algorithm but I won’t because the best code is someone else’s problem. The hypothetical ideal codebase is one in which there is only code related to the problem domain that the program is addressing. Everything else is collateral damage.
Let’s take an extreme example. The npm package noop2. Now, I could definitely write my own no-op function. In fact, I was born to write no-op functions, they are a personal speciality of mine. No-op functions are great for avoiding evil null references by providing a safe default. They are a very useful utility function but why bother importing a library just for a one-line function that does nothing?
If I use a utility function once, I’m probably going to use it at least twice, such is the nature of utility functions. So I probably don’t want to write the function in-line every time I use it and I don’t want to have this random noop variable in every file that it’s used in, that’s duplication. So I’ll abstract it out into a new file. Maybe I’ll call it utils.js.
And BAM! Just like that you’ve made a library that you now have to maintain which contains non-domain-specific code which just serves to pull you further from the platonic ideal of a computer program.
You also don’t benefit from the huge repertoire of talent available in the open source community or the extensive test suites written for such libraries (Yes, even noop2 has a test suite).
So don’t be afraid of npm install, even for a no-op function.
If you liked this article please remember to click the💚 symbol below to make sure more people get to read it!
Steven Poulton is a web developer and technical architect living in Manchester, England. In his spare time he likes to make indie music, make indie games and play with his indie cats.