Repository navigation
Conversation
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
from
October 14, 2026 17:09
6c6289e to
91c031e
Compare
Contributor
size-limit report 📦
|
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
from
October 14, 2026 17:57
91c031e to
cc3d3bc
Compare
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
from
October 14, 2026 18:06
cc3d3bc to
336cf7d
Compare
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
2 times, most recently
from
October 14, 2026 20:33
755fc00 to
00d9d69
Compare
JPeer264
added this pull request to stack #25387
October 15, 2026 08:47
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
from
October 15, 2026 08:52
00d9d69 to
c448399
Compare
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
2 times, most recently
from
October 15, 2026 11:20
f1386d1 to
5c6dd85
Compare
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
from
October 15, 2026 13:25
5c6dd85 to
ca06931
Compare
JPeer264
force-pushed
the
jp/pnpm-isolated
branch
2 times, most recently
from
October 15, 2026 14:57
3ab242c to
621c3a3
Compare
`modulesIntegration` reads the version of each CJS module in `require.cache` from its package.json in a node_modules folder of the main module. The isolated pnpm layout keeps the package files in `node_modules/.pnpm/<package id>/node_modules/<name>`, so the integration found no version there and reported the version range from the app's package.json instead. Read these folders like the node_modules folders of the main module. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The test runs a webpack production build. On the Node 20 CI runners it takes 3 to 5 seconds, close to the 5 second default timeout, and some runs time out. Locally it takes about 0.3 seconds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove `nodeLinker: hoisted` and `shamefullyHoist`, so pnpm installs its default isolated layout. Each package now resolves only the dependencies that it or the root package.json declares. - Packages declare the dependencies that they imported from the hoisted root folder, with the version that the root folder had. The lockfile gets no new versions. - `tslib` is a root devDependency, because the shared tsconfig sets `importHelpers`. - @sentry/replay declares `@sentry/conventions` as a devDependency, so its build still inlines the constant that it imports from there. - react-router, solidstart, sveltekit and tanstackstart-react declare `@types/node` 18 like the root. Without it, the optional `@types/node` peer of Vite resolves to version 20, and the Vite plugin types of @sentry/server-utils do not match. - `packageExtensions` declares the bundlers as optional peers of @apm-js-collab/code-transformer-bundler-plugins, because its type declarations import them. - rollup-utils reads the `sideEffects` field of an external package from the nearest node_modules folder of the built package, not only from the root folder. Without this, the builds keep empty imports of packages that are not in the root folder, for example `import '@sentry/core'`. - The integration test runner adds the bins of node-integration-tests to the `PATH` of setup commands such as `prisma generate`, because the Bun and Deno packages run the shared suites with their own `PATH`. - The install-playwright action runs `npx playwright` outside the repository. In the repository, npm finds the playwright version in `node_modules/.pnpm` and then runs `node_modules/.bin/playwright`, which the root folder no longer has. - The size limit of `@sentry/cloudflare (withSentry)` goes from 514 KiB to 515 KiB. This check bundles without minification, so the bundle keeps the module paths, which are about 4 KB longer under `node_modules/.pnpm`. The code in the bundle is the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The root package.json listed every workspace package as a `workspace:*` devDependency, so that each package could import any of them from the root node_modules folder like with Yarn. Remove these entries and declare the workspace packages in the packages that import them, for example `@sentry-internal/rollup-utils` in the rollup configs. The root keeps three of them: - `@sentry-internal/node-integration-tests`, because its suites import it by its own name, also from tmp folders that have their own package.json. - `@sentry/eslint-plugin-sdk`, because the root oxlint config loads it as a JS plugin. - `@sentry/sveltekit`, because size-limit bundles its build output, which imports `@sentry/sveltekit/browser-tracing-variant`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
isaacs
force-pushed
the
jp/pnpm-isolated
branch
from
October 15, 2026 19:10
621c3a3 to
307ec62
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This moves the monorepo from the hoisted
node_moduleslayout to the isolated pnpm default. Each package now declares the packages that it imports, instead of using what the root folder had. A full build gives the same files as with the hoisted layout.package.jsonno longer lists every workspace package asworkspace:*. Each package declares the workspace packages that it imports, for example@sentry-internal/rollup-utilsin the rollup configs. The root keeps three of them:@sentry-internal/node-integration-tests(its suites import it by name, also from tmp folders with their ownpackage.json),@sentry/eslint-plugin-sdk(oxlint plugin) and@sentry/sveltekit(size-limit bundles its self-import).@sentry/replaydeclares@sentry/conventionsas a devDependency, so its build still inlines the constant from there.sideEffectsfield of external packages from the nearestnode_modulesof the built package, not only from the root folder.PATHof setup commands (for exampleprisma generate), because the Bun and Deno packages run the shared suites with their ownPATH.npx playwrightoutside the repository. In the repository, npm finds that version innode_modules/.pnpmand then looks fornode_modules/.bin/playwright, which the root folder no longer has.SDK fix
modulesIntegrationdid not find the versions of CJS modules in the isolated pnpm layout (node_modules/.pnpm/<id>/node_modules/<name>), so pnpm apps got the version ranges of theirpackage.jsoninstead. It now reads these folders too. Thesuites/modulesCJS test covers it, because it now runs on this layout.packageExtensions decisions
@apm-js-collab/code-transformer-bundler-pluginsimports the types of Vite, Rollup, webpack and esbuild without declaring them.pnpm-workspace.yamldeclares them as optional peers, so its types use the Vite of the importing package. The real fix belongs upstream.Peer decisions
autoInstallPeersstaysfalse. The pnpm default (true) adds 674 package versions for peers that no package needs, for example@glimmer/componentand the GraphQL tools of Gatsby.Known issues
@sentry/cloudflare (withSentry)entry, so its limit goes from 514 KiB to 515 KiB. Some other entries change by up to 200 bytes. The bundled code is the same, but the bundles contain the longernode_modules/.pnpm/...file paths.