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

Package.json files having the same name property results in error even when added to ignoreWorkspaces #373

Closed
arnoud-dv opened this issue Nov 29, 2023 · 5 comments
Labels
bug Something isn't working

Comments

@arnoud-dv
Copy link
Contributor

I opened a PR to add an Angular adapter to TanStack query. Tried running Knip on the PR branch but get this error:

Error: must not have multiple workspaces with the same name
package '@tanstack/angular-query-devtools-experimental' has conflicts in the following paths:
    /Users/arnoud/code/opensource/query/packages/angular-query-devtools-experimental
    /Users/arnoud/code/opensource/query/packages/angular-query-devtools-experimental/build
package '@tanstack/angular-query-experimental' has conflicts in the following paths:
    /Users/arnoud/code/opensource/query/packages/angular-query-experimental
    /Users/arnoud/code/opensource/query/packages/angular-query-experimental/build

Reason being that an Angular package that is built with ng-packagr has a 'source' package.json and in the build directory the one that will be published. So you end up with two package.json files having the same name. This is easily fixable by:

  1. Adding a glob for the build directories to ignoreWorkspaces in the knip config
  2. Knip should pass the ignoreWorkspaces patterns to the ignore param of mapWorkspaces

I tested this on my machine and it fixes the error, will submit a PR.

@arnoud-dv
Copy link
Contributor Author

arnoud-dv commented Nov 30, 2023

Scherm­afbeelding 2023-11-30 om 10 36 10

I know the message is not coming from Knip itself, it comes from mapWorkspaces which is called from Knip. When it finds package.json files with the same name property it throws an error.

Hope this clarifies it a bit: in the sourcecode of an Angular package is a package.json. When building a package, ng-packgr generates a package.json file in the build directory. The build directory will then become the published package. I just want to exclude the built package.json from analysis by Knip. mapWorkspaces allows passing a glob pattern through its ignore parameter which is perfect as it will not collect the package and won't throw an error.

To add: Separately from the issue I have I also think it's more correct that if a directory is in ignoreWorkspaces that it won't be accessed at all.

@arnoud-dv
Copy link
Contributor Author

Here is the full error message and stack trace:

Reading workspace configuration(s)...
/Users/arnoud/code/opensource/query/node_modules/.pnpm/@npmcli+map-workspaces@3.0.4/node_modules/@npmcli/map-workspaces/lib/index.js:64
  return Object.assign(new Type(message), { code })
                       ^

Error: must not have multiple workspaces with the same name
package '@tanstack/angular-query-devtools-experimental' has conflicts in the following paths:
    /Users/arnoud/code/opensource/query/packages/angular-query-devtools-experimental
    /Users/arnoud/code/opensource/query/packages/angular-query-devtools-experimental/build
package '@tanstack/angular-query-experimental' has conflicts in the following paths:
    /Users/arnoud/code/opensource/query/packages/angular-query-experimental
    /Users/arnoud/code/opensource/query/packages/angular-query-experimental/build
    at getError (/Users/arnoud/code/opensource/query/node_modules/.pnpm/@npmcli+map-workspaces@3.0.4/node_modules/@npmcli/map-workspaces/lib/index.js:64:24)
    at mapWorkspaces (/Users/arnoud/code/opensource/query/node_modules/.pnpm/@npmcli+map-workspaces@3.0.4/node_modules/@npmcli/map-workspaces/lib/index.js:146:11)
    at async ConfigurationChief.getManifestWorkspaces (file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/ConfigurationChief.js:191:28)
    at async ConfigurationChief.setWorkspaces (file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/ConfigurationChief.js:165:35)
    at async ConfigurationChief.init (file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/ConfigurationChief.js:105:9)
    at async main (file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/index.js:27:5)
    at async run (file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/cli.js:23:73)
    at async file:///Users/arnoud/code/opensource/query/node_modules/.pnpm/knip@3.3.1_typescript@5.1.6/node_modules/knip/dist/cli.js:74:1 {
  code: 'EDUPLICATEWORKSPACE'
}

@webpro
Copy link
Collaborator

webpro commented Nov 30, 2023

Right. I guess was confused, because just the other day I implemented the feature, but tested against workspaces not read through mapWorkspaces (but additional ones configured in knip.json), so I didn't recognize the error message without the stack trace.

@webpro
Copy link
Collaborator

webpro commented Dec 1, 2023

Since workspaces can also be ignored in the package manager config itself, and #374 itself is also closed, closing this one.

@webpro webpro closed this as completed Dec 1, 2023
@TkDodo
Copy link

TkDodo commented Dec 1, 2023

@webpro I get the error even if I explicitly ignore the build package:

ignoreWorkspaces: [
    'examples/**',
    'packages/angular-query-devtools-experimental/build/**',
  ],

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants