Developing with modular package architecture (Meteor vs Lerna vs ?)


When developing a large app, a modular package architecture is desirable. I like the Meteor approach and I like the structure that Vulcan uses (each feature is in its own package)

There is also a trend towards monorepos. LernaJS project says:

… some projects will organize their codebases into multi-package repositories (sometimes called monorepos). Projects like Babel, React, Angular, Ember, Meteor, Jest, and many others develop all of their packages within a single repository.

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

There seems to be a significant overlap between Meteor and Lerna when it comes to package approach. I don’t know too much about Lerna, however, there are two downsides to Meteor (from a “marketing perspective”):

  • It uses a non-standard package.js. I imagine some people would be afraid of being “locked-in” to Meteor.
  • Packages are mixing client and server code. This often makes sense but also is also non-standard.

Which approach do you think is better (Meteor or Lerna). Or is there a third way that I’m not aware of?