Code Monkey home page Code Monkey logo

Comments (10)

webpro avatar webpro commented on September 20, 2024 2

...so instead of changing anything, we can now also install v3.4.0 :)

Please let me know if there are any issues or regressions!

from knip.

webpro avatar webpro commented on September 20, 2024

This should be handled properly. I have a few tests for coverage, but of course there can be a bug. Any chance you could use one of the options to make a minimal reproduction and drop your files and configuration there?

from knip.

KirianCaumes avatar KirianCaumes commented on September 20, 2024

Sure, here you go: https://github.com/KirianCaumes/Bug-knip
Let me know if you need more informations!

from knip.

EvgenyOrekhov avatar EvgenyOrekhov commented on September 20, 2024

This is a regression. I'm still using knip 2.41.3 and it works fine, but the latest version (3.3.5) has this issue.

from knip.

webpro avatar webpro commented on September 20, 2024

The issue is that standard module resolver does not work for non-standard files like .svg or .png. So it falls back to a simple one, but in this structure:

.
└── src
    ├── app.tsx
    ├── assets
    │   └── logo.png
    └── data
        └── data.tsx

This import in data/data.tsx won't be resolved properly:

import Logo from 'assets/logo.png'

For Knip to resolve it you'll have to use something like ../assets/logo.png or alternatively something like ~/assets/logo.png with paths config:

{
  "compilerOptions": {
    "paths": {
      "~/*": ["./src/*"]
    }
  }
}

This is a regression. I'm still using knip 2.41.3 and it works fine, but the latest version (3.3.5) has this issue.

I don't think this worked in v2 either.

from knip.

EvgenyOrekhov avatar EvgenyOrekhov commented on September 20, 2024

or alternatively something like ~/assets/logo.png

I agree that it's best to use an alias (like ~ or @) so that the paths would not look like regular npm packages.

from knip.

EvgenyOrekhov avatar EvgenyOrekhov commented on September 20, 2024

I was able to fix it in my project by declaring @ as an alias for src

I added this to tsconfig.json

  "compilerOptions": {
    // ...
    "baseUrl": "src",
    "paths": {
      "@/*": ["*"]
    }
  }

and this to webpack config

    alias: {
      '@': path.resolve(__dirname, 'src'),
    },

So my imports now look like import MySvg from '@/assets/svg/my.svg'
No more false warnings from knip.

from knip.

webpro avatar webpro commented on September 20, 2024

Tbh I think @ could be confusing too, since @scoped/packages exist (and also e.g. @scoped/packages/file is a valid specifier). But yeah, @/ is different and works just fine.

I just realized one thing you could also do today that fixes the issue in the attached repository:

{
  compilers: {
    svg: () => '',
    png: () => ''
  }
}

Then we trick TS into thinking 'assets/svg/my.svg.ts' exists. Then you don't need to change anything else in the codebase.

Perhaps I should try to build this into Knip (again)...

from knip.

webpro avatar webpro commented on September 20, 2024

🚀 This issue has been resolved in v3.4.0. See Release 3.4.0 for release notes.

from knip.

KirianCaumes avatar KirianCaumes commented on September 20, 2024

Everything works now, thank you!

from knip.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.