Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nx release version duplicates local packages across "dev" and "prod" dependencies #19990

Closed
1 of 4 tasks
kraenhansen opened this issue Nov 2, 2023 · 1 comment · Fixed by #19995
Closed
1 of 4 tasks
Assignees

Comments

@kraenhansen
Copy link
Contributor

kraenhansen commented Nov 2, 2023

Current Behavior

I'm experiencing an issue where running nx release version will mess up the package.json files when local dependencies are shared across dev and prod dependencies and duplicate the local dependencies.

Given this NPM workspace-based monorepo

// package.json
{
  "name": "root",
  "private": true,
  "workspaces": [
    "packages/*"
  ],
  "dependencies": {
    "@nx/js": "^17.0.2",
    "nx": "^17.0.2"
  }
}
// packages/a/package.json
{
  "name": "local-package-a",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "local-package-b": "0.1.0"
  },
  "devDependencies": {
    "local-package-c": "0.1.0"
  }
}
// packages/b/package.json
{
  "name": "local-package-b",
  "version": "0.1.0",
  "private": true
}
// packages/c/package.json
{
  "name": "local-package-c",
  "version": "0.1.0",
  "private": true
}

Running npx nx release version minor -d yields

 >  NX   Running release version for project: local-package-a

local-package-a 🔍 Reading data for package "local-package-a" from packages/a/package.json
local-package-a 📄 Resolved the current version as 0.1.0 from packages/a/package.json
local-package-a ✍️  New version 0.2.0 written to packages/a/package.json

 >  NX   Running release version for project: local-package-c

local-package-c 🔍 Reading data for package "local-package-c" from packages/c/package.json
local-package-c 📄 Resolved the current version as 0.1.0 from packages/c/package.json
local-package-c ✍️  New version 0.2.0 written to packages/c/package.json
local-package-c ✍️  Applying new version 0.2.0 to 2 packages which depend on local-package-c

 >  NX   Running release version for project: local-package-b

local-package-b 🔍 Reading data for package "local-package-b" from packages/b/package.json
local-package-b 📄 Resolved the current version as 0.1.0 from packages/b/package.json
local-package-b ✍️  New version 0.2.0 written to packages/b/package.json
local-package-b ✍️  Applying new version 0.2.0 to 2 packages which depend on local-package-b

UPDATE packages/a/package.json [dry-run]

    "name": "local-package-a",
-   "version": "0.1.0",
+   "version": "0.2.0",
    "private": true,
    "dependencies": {
-     "local-package-b": "0.1.0"
+     "local-package-b": "0.2.0",
+     "local-package-c": "0.2.0"
    },
    "devDependencies": {
-     "local-package-c": "0.1.0"
+     "local-package-c": "0.2.0"
    }
  }
+

UPDATE packages/c/package.json [dry-run]

    "name": "local-package-c",
-   "version": "0.1.0",
+   "version": "0.2.0",
    "private": true
  }
+

UPDATE packages/b/package.json [dry-run]

    "name": "local-package-b",
-   "version": "0.1.0",
+   "version": "0.2.0",
    "private": true
  }
+


NOTE: The "dryRun" flag means no changes were made.

Note

Notice that local-package-c is being added in dependencies of local-package-a although it's a devDependency.

Expected Behavior

From the example above, I'd expect the packages/a/package.json dependencies and devDependencies to contain the same keys before and after running nx release version.

GitHub Repo

https://github.com/kraenhansen/nx-issue-19990

Steps to Reproduce

  1. Setup an NPM monorepo with three local packages: A, B and C.
  2. Make A depend on B and C, through "prod" and "dev" dependencies respectively.
  3. Run nx release version
  4. Notice how B and C gets duplicated in the dependencies and devDependencies of A's package.json.

Nx Report

>  NX   Report complete - copy this into the issue template

   Node   : 18.18.2
   OS     : darwin-arm64
   npm    : 9.8.1
   
   nx             : 17.0.2
   @nx/js         : 17.0.2
   @nx/workspace  : 17.0.2
   @nx/devkit     : 17.0.2
   @nrwl/tao      : 17.0.2
   typescript     : 5.2.2

Failure Logs

No response

Package Manager Version

No response

Operating System

  • macOS
  • Linux
  • Windows
  • Other (Please specify)

Additional Information

I believe this is the code that needs an update

const dependentProjects = Object.values(localPackageDependencies)
.filter((localPackageDependencies) => {
return localPackageDependencies.some(
(localPackageDependency) =>
localPackageDependency.target === project.name
);
})
.flat();

kraenhansen added a commit to kraenhansen/nx that referenced this issue Nov 2, 2023
@AgentEnder AgentEnder added the scope: core core nx functionality label Nov 2, 2023
@AgentEnder AgentEnder added scope: misc Misc issues and removed scope: core core nx functionality labels Nov 2, 2023
kraenhansen added a commit to kraenhansen/nx that referenced this issue Nov 6, 2023
kraenhansen added a commit to kraenhansen/nx that referenced this issue Nov 11, 2023
Copy link

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.

@github-actions github-actions bot locked as resolved and limited conversation to collaborators Dec 14, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants