Conversation
|
Quick explanation of this first (very WIP) commit: I removed lerna in favor of a package.json outlined in the example here. In the root |
vhoof
left a comment
There was a problem hiding this comment.
I like where this is going, even if I'm two months late to the party. The Heroku stuff might need some massaging in the process, could help out with that if you're still wanting to do this.
|
@vhoof I would very much appreciate some help on the CI/CD/Heroku side of this (if it gets to that point). While this is a project structure that I definitely think makes sense going-forward, I'm not totally sold that it makes sense to rework the existing project to fit this structure. It ultimately depends on how much thrash it would wind up causing, which I hope to have a clearer picture of after experimenting a bit and getting this PR up-to-date with the latest develop. |
Goals
Describe the problem being solved:
Our monorepo structure has proven confusing to apprentices. Needing to learn different sets of commands for lerna and npm is a bit much, and it's led to some weirdness (dependencies being installed in the root, being one example).
We also have some issues enforcing specific node/npm versions. There was a new version of
npmpublished (version 7) which introduces a number of breaking changes. Some apprentices upgraded tonpm@7while others are still usingnpm@6. These discrepancies have caused issues withpackage-lock.jsonfiles being added which break our CI testing because we usenpm@6there.Impacted areas in the application:
This primarily impacts developer tooling and CI/CD. There should be no functional changes to the app itself.
Solution
I'm hoping to address the problems outlined above by leveraging the native workspaces functionality offered in
npm@7, as well as updating ourpackage.jsonfile(s) to enforce specific versions of node (the latestltsversion) and npm (version 7).I'll also be updating the README to include platform-agnostic installation instructions for node. I hope that by locking down to a specific version of node, we can avoid forcing apprentices to deal with the complexity of installing a version manager or other package management tools on their current platform, and just direct them to downloading the appropriate LTS Node Executable from nodejs.org.
Concerns
I have two notable concerns with taking this approach:
That first concern is a biggie, but I hope that any up-front productivity cost will be offset by simplifying and clarifying our developer tooling/setup.
The second one may or may not be significant. I'm just calling it out because I wasn't involved in any part of the CI/CD setup