Commit Graph

14 Commits

Author SHA1 Message Date
Zoltan Kochan
fd511e4676 feat: isolated global packages (#10697)
**TLDR:** Global packages in pnpm v10 are annoying and slow because they all are installed to a single global package. Instead, we will now use a system that is similar to the one used by "pnpm dlx" (aka "pnpx").

Each globally installed package (or group of packages installed together) now gets its own isolated installation directory with its own `package.json`, `node_modules`, and lockfile. This prevents global packages from interfering with each other through peer dependency conflicts or version resolution shifts.

## Changes

- Add `@pnpm/global-packages` shared utilities package for scanning, hashing, and managing isolated global installs
- `pnpm add -g` creates isolated installs in `{pnpmHomeDir}/global/v11/{hash}/`
- `pnpm remove -g` removes the entire installation group containing the package
- `pnpm update -g` re-installs into new isolated directories and swaps symlinks
- `pnpm list -g` scans isolated directories to show installed global packages
- `pnpm outdated -g` checks each isolated installation for outdated dependencies
- `pnpm store prune` cleans up orphaned global installation directories

## Breaking changes

- `pnpm install -g` (no args) is no longer supported — use `pnpm add -g <pkg>`
- `pnpm link <pkg-name>` no longer resolves packages from the global store — only relative or absolute paths are accepted
- `pnpm link --global` is removed — use `pnpm add -g .` to register a local package's bins globally
2026-03-01 15:49:18 +01:00
Zoltan Kochan
dab9abef5c Merge remote-tracking branch 'origin/main' into v11 2025-10-24 14:19:07 +02:00
Ryo Matsukawa
270c447017 fix: prevent table width error in pnpm outdated --long (#10050)
close #10040
2025-10-12 19:38:32 +02:00
Zoltan Kochan
491a84fb26 feat: use ESM instead of commonjs (#9870) 2025-08-25 10:02:00 +02:00
Zoltan Kochan
9362b5fb15 fix: updateConfig in pnpm-workspace.yaml should not be ignored (#9501)
* fix: updateConfig in pnpm-workspace.yaml should not be ignored

close #9500

* fix: reading executionEnv from pnpm-workspace.yaml
2025-05-08 12:24:43 +02:00
v1rtl
acdf26d8cd refactor: replace strip-ansi with built-in util.stripVTControlCharacters (#9009) 2025-01-26 11:44:40 +01:00
Brandon Cheng
a724295578 fix: catalogs exception when running pnpm outdated with --compatible flag (#8825)
close #8566
2024-12-02 12:03:38 +01:00
btea
f6e9677e04 feat: outdated command add sort-by option (#8523)
* feat: `outdated` command add `sortField` option
Currently, the default sorting result is a combination of multiple
rules, including sorting by `packageName`, sorting by `SemverChange`,
and sorting by the `current` field.
I wanted to set `sortField` to support configuration of
`name`/`semver`/`current`, but considering that the other two values
do not seem to make much sense except `name`, I
will keep the current situation for the time being.

* feat: add changeset

* fix: format

* chore: update test

* test: update

* fix: update

* refactor: rename to sort-by

* refactor: outdated

* docs: update changeset

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-09-28 02:56:20 +02:00
Brandon Cheng
f6e7ace2a2 fix: pnpm outdated should work with catalog: protocol (#8304)
* fix: pnpm outdated works with catalog: protocol

* test: add has-outdated-deps-using-catalog-protocol fixture

* test: add pnpm outdated catalog protocol test

* chore: changeset

* refactor: outdated

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2024-07-15 18:45:10 +02:00
btea
21de734b5a fix: outdated output table information is misplaced (#8037) 2024-05-04 11:44:02 +02:00
Zoltan Kochan
a5a3b995c1 test: use sync fs operations in tests (#7664) 2024-02-16 19:43:04 +01:00
Zoltan Kochan
ee61ca4cb7 style: update eslint (#6236) 2023-03-18 14:57:29 +02:00
Zoltan Kochan
9cbe293876 refactor: put all non-public projects to directories that start with __ 2022-11-20 02:40:44 +02:00
Zoltan Kochan
4ca53b0b50 refactor: group projects in different subdirectories (#5659) 2022-11-20 01:35:22 +02:00