-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
Verify latest release
- I verified that the issue exists in the latest pnpm release
pnpm version
10.11.0
Which area(s) of pnpm are affected? (leave empty if unsure)
CLI
Link to the code that reproduces this issue or a replay of the bug
No response
Reproduction steps
Please see the full description below.
Describe the Bug
I cannot share the repository that this is reproducible in. I can do a screenshare on a discord call or similar to walk through what I describe below, however. Please let me know if that's something maintainers would like to do.
@KSXGitHub Z suggested I tag you here. pnpm deploy
has several new bugs since v10.
- Subdirectories are created in workspace packages, when another package or project runs
pnpm deploy
- Superfluous directory is created in the target project's directory when running
pnpm deploy
We're running pnpm deploy
like this: pnpm --filter $project --prod deploy $projectRoot/pnpm.out --force
. The $project
token represents the package/project name. The $projectRoot
token represents the package/project absolute path.
Our workspace looks similar to this:
root
|_ packages
|_ packageA
|_ packageB
|_ services
|_ serviceA
Our pnpm-workspace.yaml
file looks like this:
packages:
- 'packages/*'
- 'services/*'
catalog:
'@liveblocks/node': 2.18.3
'@liveblocks/core': 2.18.3
'@liveblocks/client': 2.18.3
dangerouslyAllowAllBuilds: true
enablePrePostScripts: true
forceLegacyDeploy: true
shamefullyHoist: true
Observe that forceLegacyDeploy
is defined. (The new linking strategy for packages is incredibly undesirable for deploying services/APIs/etc on AWS ECS, or anything Docker related.)
When we run pnpm --filter serviceA deploy /path/to/serviceA/pnpm.out
the following directories get created:
/root/packageA/services/serviceA/pnpm.out/node_modules/{etc}
/root/packageB/services/serviceA/pnpm.out/node_modules/{etc}
/root/serviceA/services/serviceA/pnpm.out/node_modules/{etc}
/root/serviceA/pnpm.out/node_modules/{etc}
Observe that services/serviceA/pnpm.out/node_modules/{etc}
is created within the target serice's directory, in addition to the package directories.
Now, packageA depends on a package from the registry; @dot/log
. @dot/log
has a dependency on chalk
. With v9, /root/serviceA/pnpm.out/node_modules/
included that transient dependency chalk
because we were shamefully hoisting. In v10, it does not. Instead, the chalk
dependency is for some reason within /root/packageA/services/serviceA/pnpm.out/node_modules/
and not the target pnpm.out
directory.
(You may ask why we specify an output directory; We deploy several services in parallel, and we need that boundary separation)
All this said, v10 appears to have some issues with creating extra directories and hoisting.
Expected Behavior
forceLegacyDeploy
works in the same, or compatible, manner as the deploy command in v9, does not create additional directories, and properly hoists transient dependencies.
Which Node.js version are you using?
20.19.0
Which operating systems have you used?
- macOS
- Windows
- Linux
If your OS is a Linux based, which one it is? (Include the version if relevant)
No response