-
Notifications
You must be signed in to change notification settings - Fork 3.6k
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