ADR 1: Restructure per-project dependencies
Status
Accepted
Context
Currently, for a per-project installation, all dependencies are installed to the ./.basalt
directory. The way transitive dependencies are installed create some issues. For example, if B is a dependency of A, it will be installed in the ./.basalt
directory of package A. This creates a deep hierarchy (early versions of npm
ran into this)
Decision
When installing dependencies for a per-project installation, all dependencies should be hoisted to the top level ./.basalt
directory, or to the ./.basalt
directory. To prevent version conflicts, version numbers are appended to the package when downloading and extracting. For example, if package-b@v0.1.0
is a dependency of package-a@v0.8.0
, it will be installed to the ./.basalt/transitive
directory. More details can be found in Package Installation
Consequences
Negatives
Current users of basalt
will have to completely remove their previous .basalt
directory, and reinstall packages. Since the main ./.basalt/bin
, ./.basalt/completions
, and ./.basalt/man
directories are not changing, code changes within packages are unnecessary
Positives
- More maintainable and less buggy code
- Potentially decrease the total disk space of
.basalt
- Easier to introspect source code of packages