webpro-nl / knip

✂️ Find unused files, dependencies and exports in your JavaScript and TypeScript projects. Knip it before you ship it!
https://knip.dev
ISC License
6.88k stars 167 forks source link

circular dependencies making knip stuck #749

Closed blephy closed 1 month ago

blephy commented 2 months ago

Reproduction url

https://github.com/blephy/knip-circulare-dep

Description of the issue

Given a mono-repository, if it's contains project which are dependent on each other, knip is running in loop and never failed.

Yes, circular dependencies are bad, but there is some case you cannot do anything about :

Each are requesting each other.

I did manage to bypass this bug by not including in their package.json's devDependencies the package, but instead to rely on a relative import in configs.

instead of :

{
  "name": "prettier-config",
  "devDependencies": {
    "eslint-config": "workspace: *"
  }
}

and

module.exports = {
  root: true,
  extends: ['eslint-config'],
};

do :

{
  "name": "prettier-config",
  "devDependencies": {
  }
}

and

module.exports = {
  root: true,
  extends: ['../eslint-config/index.cjs'],
};
webpro commented 2 months ago

https://i-do-no-have.com/

it-is-required.though

blephy commented 2 months ago

https://i-do-no-have.com/

it-is-required.though

I will make it in a couple of hours. Sorry i do not have time right now

blephy commented 2 months ago

cc @webpro

https://github.com/blephy/knip-circulare-dep

webpro commented 2 months ago

No issues here:

❯ pnpm knip

> root@1.0.0 knip /Users/lars/p/knip/exercises/knip-circulare-dep
> VITE_CJS_IGNORE_WARNING=true knip

Unused devDependencies (2)
eslint-config  libs/prettier-config/package.json
nx             package.json
Unlisted dependencies (1)
eslint-config-eslint-config  libs/prettier-config/.eslintrc.cjs
 ELIFECYCLE  Command failed with exit code 1.
blephy commented 2 months ago

Hum ...

is it relative to Node / OS ?

i'm on

ProductName:        macOS
ProductVersion:     14.5
BuildVersion:       23F79
Node:                     v20.16.0

Or maybe a root .npmrc which change node-linker ? https://pnpm.io/npmrc#node-linker

webpro commented 2 months ago

You could try CSB or SB: https://knip.dev/guides/issue-reproduction#templates

webpro commented 1 month ago

Closing this due to unable to reproduce.