DEV Community

Flat node_modules is not the only way

Zoltan Kochan on June 24, 2018

This article covers an old version of pnpm. For an updated version of the article go here. New users of pnpm frequently ask me about the weird str...
Collapse
 
zenmumbler profile image
zenmumbler • Edited

Hey Zoltan, I had not heard of pnpm before but installed it now because I really like the underlying (engineering) principles you mention here. I see it also support workspaces, so I will try and see if I can apply it in my Stardazed project which is a quickly-growing monorepo. It mostly uses peerDependencies, though.

I'll also look into what Jan mentioned about the recursive commands and see what they are.

My main initial feedback is that the name pnpm can be confusing to some as it implies some relation between the product and the npm org. It's probably too late to change this now but I can see why FB went with the name "yarn" as it is clearly something else.

Besides that though, looks good! Thanks!

Updated to add:

I already had the first benefit of using this as I have devDeps that work in node (rollup) and it installs the @types/node package which was causing VS Code to add a ton of Node types in the autocomplete for my browser-based package I'm writing. Now that those packages are whiffed away, I don't have to work around this anymore! Nice.

2nd update:

Ahh, pnpm recursive run ... could indeed make build processes a lot less script-heavy. Great stuff!

Collapse
 
zkochan profile image
Zoltan Kochan

Hey Arthur! Let us know if you have any issues with pnpm or questions.

pnpm (performant npm) was a name given by the initial author of pnpm - Rico Sta. Cruz. It was based on ideas of ied - another js package manager with a bad name😄.

We are aware of the bad name issue and maybe we'll rename it in the future. At the right time.

Collapse
 
zenmumbler profile image
zenmumbler

Thanks Zoltan, I figured out quickly indeed that the recursive commands make working with monorepos a lot easier. Very nice. I was looking through your docs and was wondering what the purpose is of pnpm server. Is it for CI contexts?

Thread Thread
 
zkochan profile image
Zoltan Kochan

The server feature was added for glitch. Their use case is that they have many containers that use a shared store but the containers don't have access to the store. So when an installation is done in a container, actions like "download a tarball from the registry" or "link a package from the store to my project" are delegated to the store server.

It probably deserves a separate article.

I see big potential in the store server. Like in the future it could keep the store warm or seed the packages in a p2p network.

Thread Thread
 
zenmumbler profile image
zenmumbler

Got it, thanks for explaining again. I'll convert some projects and file any issues I may find.

Collapse
 
jvanbruegge profile image
Jan van Brügge

We (the maintainers of Cycle.js) are currently migrating from yarn to pnpm. Our main motivation:

  • written in Typescript
  • recursive commands (especially recursive link for using our examples as end-2-end tests)
  • fast installs due to linking not copying

I am currently redoing our complete tooling and it allows us to throw away our Makefile and a lot of custom ad-hoc scripts.
Thanks for writing such a good piece of tooling!

Collapse
 
zkochan profile image
Zoltan Kochan

Awesome! I really like Cycle.js!

If you have any issues or need some features, feel free to write in our chatroom or create new issues in the repo.

Collapse
 
lucifer1004 profile image
Gabriel Wu

Is pnpm compatible with lerna?

Collapse
 
zkochan profile image
Zoltan Kochan

I don't know, I did not try it but I guess you could use lerna for publishing and pnpm recursive commands for everything else