Skip to content

[bug]: pnpm dev fails on fresh clone due to node-linker = isolated incompatibility with Turborepo workspace builds #8667

@sshadmand

Description

@sshadmand

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 = isolated intentional? If so, is there a documented setup step that propagates built artifacts into the isolated copies?
  • Would a change to node-linker = hoisted be 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

  1. Fresh clone of the repo
  2. ./setup.sh
  3. pnpm install
  4. pnpm 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

Metadata

Metadata

Assignees

Labels

planesync issues to Plane🐛bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions