3 ms·
Ultra – New JavaScript package manager
- nachoaldamav 4y agoHi! For the last few months I have been working on a new package manager for JavaScript/Node.js called Ultra (or Ultrapkg), it is faster than NPM and Yarn Classic and in certain environments it is faster than PNPM. To put some technical context, it uses the same cache system as PNPM, using a shared store for packages, along with some more optimizations like per-package lockfile or manifest cache. Any suggestions/issues or comments are welcome!
- fortnum 4y agohttps://xkcd.com/927/ https://xkcd.com/927/
- tomxor 4y agoTrue for so many things, but I don't think that applies here. Many of the npm alternatives are compatible or provide a superset - they have also helped to apply pressure to npm to improve, they are also not competing standards, but more like competing features and performance (implementation).
- tomxor 4y agoSorry it didn't get traction. Maybe try a repost later. I'm interested in what performance is like for private packages outside of NPM registries, i.e using git+ssh... NPM is almost unusably slow to resolve these, yarn is a factor or two faster, and combined with it's behaviour of not re-resolving stuff in the package-lock this makes it just about usable for me - but even with yarn the overall experience of using many git+ssh repos is not great, it's even worse if dependencies are nested. I'm not sure where the performance limitation lies with resolving git+ssh based revisions, but I'm pretty sure the existing package managers are not near the limit of what git remotes could provide - I've written some scripts relying on remote git tags with CLI plumbing commands and even that is not particularly slow.
- nachoaldamav 4y agoHi, first of all thanks for your comment! Git integration is in the roadmap and yesterday I started thinking about how to do it. Based on how this CLI works, my idea for caching git packages is the following: "userFolder/Ultracache/git/user/repo/hash" This will help to not download many times the same repository. Anyway, to do this I still need to figure out how to download the packages. For this I thought about using Node.js Child Process / Spawn to execute "git clone <repo>", this should be as fast as execute the command in your shell. The problem with NPM and Yarn is probably how they work. NPM/Yarn fetchs all the manifests to create the dependency tree before starting to download the packages. With Git packages you can't do that because you can't get the manifest before the packages. In the following days I will work on this starting today, so maybe you want to check the repo!