[bug]: pnpm dev fails on fresh clone due to node-linker = isolated incompatibility with Turborepo workspace builds
@prateekshourya29 is already working on this.
Since Apr 9, 2026.
- Dominant language
- TypeScript
- Stars
- 59.6k
- Forks
- 5.8k
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 49
Description
Is there an existing issue for this?
No.
- I have searched the existing issues
Current behavior
Description
Running pnpm dev on a fresh clone fails with the following error across multiple apps (admin, space, etc.):
Failed to resolve entry for package "@plane/utils". The package may have incorrect main/module/exports specified in its package.json.
Example error logs
min:dev: failed to load config from /Users/sshadmand/repos/plane/apps/admin/vite.config.ts
admin:dev: Error: Build failed with 1 error:
admin:dev: ../../node_modules/esbuild/lib/main.js:1227:27: ERROR: [plugin: externalize-deps] Failed to resolve entry for package "@plane/utils". The package may have incorrect main/module/exports specified in its package.json.
admin:dev: at failureErrorWithLog (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:1477:15)
admin:dev: at /Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:946:25
admin:dev: at runOnEndCallbacks (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:1317:45)
admin:dev: at buildResponseToResult (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:944:7)
admin:dev: at /Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:971:16
admin:dev: at responseCallbacks.<computed> (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:623:9)
admin:dev: at handleIncomingPacket (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:678:12)
admin:dev: at Socket.readFromStdout (/Users/sshadmand/repos/plane/node_modules/esbuild/lib/main.js:601:7)
admin:dev: at Socket.emit (node:events:518:28)
admin:dev: at addChunk (node:internal/streams/readable:561:12)
admin:dev: at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
admin:dev: at Readable.push (node:internal/streams/readable:392:5)
admin:dev: at Pipe.onStreamRead (node:internal/stream_base_commons:189:23) {
admin:dev: errors: [Getter/Setter],
admin:dev: warnings: [Getter/Setter]
admin:dev: }
live:dev: node:internal/modules/esm/resolve:274
live:dev: throw new ERR_MODULE_NOT_FOUND(
Root Cause
The .npmrc sets node-linker = isolated, which causes pnpm to copy workspace packages into each app's node_modules at install time rather than symlinking them. This means that when Turborepo builds packages/utils (and other internal packages) as part of the dev pipeline, the resulting dist/ files are written to packages/utils/dist/ — but the copy at apps/admin/node_modules/@plane/utils/dist/ remains empty and is never updated.
Even though turbo.json correctly declares "dependsOn": ["^build"] for the dev task, the built artifacts never reach the consuming apps because of how the isolated linker works.
Questions for Maintainers
- Is
node-linker = isolatedintentional? If so, is there a documented setup step that propagates built artifacts into the isolated copies? - Would a change to
node-linker = hoistedbe acceptable, or is there a preferred alternative fix?
Environment
- OS: macOS
- Node: v22.13.1
- pnpm: 10.24.0
Steps to reproduce
Steps to Reproduce
- Fresh clone of the repo
./setup.shpnpm installpnpm dev
Expected Behavior
pnpm dev starts successfully with all internal packages resolved.
Actual Behavior
admin, space, and other apps fail immediately because @plane/utils, @plane/logger, and other internal packages have empty dist/ folders in their app-level node_modules copies.
Workaround
Changing .npmrc locally to node-linker = hoisted resolves the issue. With the hoisted linker, workspace packages are symlinked so built artifacts are immediately visible to all consuming apps.
Environment
Deploy preview
Browser
None
Variant
Local
Version
v1.2.2
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.