npm / npm/rfcs

[RRFC] Include a `globallink` install strategy

Open
#817 7 comments 7 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
777
Forks
267
PR merge metrics
No merged PRs in 30d

Description

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 when 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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing linked install strategy and the clean-install command, then compare the proposed behavior with PNPM's global store. The issue does not name implementation files or tests; done would require an agreed design for global storage, dependency reuse, cleanup, and configuration overrides.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js
Domain
developer-experience, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.