chore: add adio and clean up transitive dependencies #202
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Due to the way
yarnworkspaces hoists dependencies and in combination with node's module resolution strategy, it is easy to consume a dependency not specified in my ownpackage.jsonif that dependency is declared by another package and then hoisted byyarn.For example, package A and B could specify☹️
crocksas a dependency in theirpackage.jsons.yarnwill appropriately hoist this shared dependency to the rootnode_modules. However, this means package C can nowrequire('crocks')without specifyingcrocksas a dependency in it's ownpackage.jsonfile. This is otherwise known as a "transitive dependency". This isn't exclusively an issue in a monorepo, it is just exacerbated by a monorepo and hoisting strategy like that used byyarnworkspaces. The root cause is node's module resolution strategy. Both a boon and a curseThis PR mitigates the chances of using a transitive dependency by enforcing that each package specify any dependencies in its own
package.json(what you would expect). This is accomplished by usingadio. Apre-commitcheck is added to ensure no transitive dependencies are added in subsequent commits.