You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
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 thelinked
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
asgloballink
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.The text was updated successfully, but these errors were encountered: