Designing Good Package Managers: A Brief History
At JSConf EU 2018, day Ryan Dahl (the original creator of Node.js) went over his regrets when designing the language, and introduced Deno, a TypeScript runtime built around V8. One of his regrets was how Node’s package system was designed, and a few issues that arose from it. From the trite (Not appending .ts
or .js
to imports) to deeper, harder to fix issues (Singular control and point of failure with the NPM registry).
I wanted to expand on his points and genericize it across platforms and dive into how every language or framework does it - from *nix’s apt
to Rust’s crates
to PHP’s composer
.
Overview
To start we have to actually define what a package manager actually is - what exactly does a modern package manager provide?
-
Remote package installation
-
Dependency management
-
Version management
History
Most common failures
Doing things “right”
Conclusion
Additional Reading
These are some links and resources that helped me while I was researching this article.
JonLuca at 08:50