Skip to content

[RRFC] Include a globallink install strategy #817

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
TheBrenny opened this issue Apr 22, 2025 · 0 comments
Open

[RRFC] Include a globallink install strategy #817

TheBrenny opened this issue Apr 22, 2025 · 0 comments

Comments

@TheBrenny
Copy link

Motivation ("The Why")

There's no doubt that NPM is the butt of a lot of memes relating to how heavy the local node_modules folder can get. Especially on big projects, and whne working on multiple big projects over time, the duplication of the same packages across different project spaces can cause a significant impact on hard drive space. A tool already exists to address this issues: PNPM. However, PNPM is not a 1-for-1 replacement - there are some quirks with the commands, and while for the most part it works, these nuances can get in the way of efficient package management, including when sharing code among developers (especially in the Open Source community).

A globallink install strategy should be included to address this and would work similar to how the linked strategy works now. However, instead of the packages being saved in ./node_modules/.store, they would be saved in /path/to/npm/global/node_modules/.store.

This will also cause an update to the clean-install command where the packages (and exact dependencies) for a project are deleted from the global store and re-installed.

Of course, this install strategy can be overridden by specifying a different type at the command line or local config.

How

Current Behaviour

The hoisting of packages to the root of the node modules folder helps to deduplicate packages across the project. However, this is only localised to the project. As an example, I work on many web apps that all use SvelteKit and I need to download and store the entire SvelteKit package every time for each project (36MB). Add on the extra frameworks that I use, and that number starts to add up pretty quickly to a couple hundred megabytes.

Desired Behaviour

By specifying the install-strategy as globallink all the packages would be installed into a global store. npm would resolve the package requirements of an install command, determine that a package exists within the store which meets the version criteria and links to it instead of downloading it again. If no package in the store meets the criteria, one is simply downloaded.

I might be oversimplifying the complexity, but the implementation could be an increase in capability of the linked install strategy, in that the store that it points to is the global store, rather than the local one.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant