Comments (4)
Actually, this path means
As you mentioned already, this is what it means to Webpack. Knip indeed does not copy all module resolution internals out there but has a generic solution.
Can I ask how knip can be configured to adapt to such a file path?
Regular module resolution should be fine, so I'd expect only the ./index.vue
to be found an issue here, no? Unfortunately this can't be configured with Knip.
In general, I would recommend to go with more ES Modules-like semantics, i.e. don't rely on the dir/index
lookup and don't omit the extension.
If it is not supported currently, if I want to develop the knip source code by fork repo, which function and file should I start with to modify the path finder code logic?
-
Some work has been done recently to try and see if custom module resolution is feasible. In #126 a solution for React Native/Metro is discussed, and a working version has been published. That idea could probably be used to cover the use case you are describing as well, maybe by exporting a module resolver from the Webpack plugin. If that effort continues, I'm not yet sure yet how it should be configured. It's in the
feat/react-native-metro
branch of this repo and most of the work is in this commit: bdae3d6). -
If you're still interested in forking and modifying the current implementation yourself you can start here: https://github.com/webpro/knip/blob/main/packages/knip/src/typescript/resolveModuleNames.ts.
from knip.
Thanks for the reply.
Regular module resolution should be fine, so I'd expect only the ./index.vue to be found an issue here
I checked the knip execution results and found that **/index.js
or **/index.vue
were both output as unused files
, (both path omit index.js | index.vue)
It's in the feat/react-native-metro branch of this repo and most of the work is in this commit: bdae3d6).
I looked at this part and tried using "knip": "^0.0.0-metro.1"
, and this is my metro.config.js
configuration
module.exports.__KNIP_PLATFORMS__ = {
vue: [
['/index', ''],
['.vue', ''],
],
js: [
['/index', ''],
['.js', ''],
],
ts: [
['/index', ''],
['.ts', ''],
],
};
and this is my knip.json
configuration
{
"entry": ["src/index.js"],
"project": ["src/**/*.{js,jsx,ts,tsx,vue}"],
"paths": {
"@/*": ["src/*"]
},
"includeEntryExports": true,
"exclude": ["dependencies", "unlisted", "unresolved", "enumMembers", "types", "exports"]
}
The analysis results are still not within expectations, and more .vue files appear in unused files
I don't know whether the problem is caused by the missing extension of .vue
or the problem caused by omitting index.vue
. I need to keep researching this.
I will also take the time to look at the source code you mentioned above.
Thanks
from knip.
The analysis results are still not within expectations
The module resolver in the Metro plugin is indeed not what you need to suit your needs with your Webpack setup. It does not cater for omitted extensions (because I think it's not needed there). Sorry if that was confusing. I was saying that we would need a new module resolver in the Webpack plugin.
from knip.
Sorry if that was confusing
It's ok :)
I was saying that we would need a new module resolver in the Webpack plugin.
Yeah, this may be the solution
from knip.
Related Issues (20)
- Commitlint plugin: specifier.startsWith is not a function HOT 1
- commitlint plugin update breaks when `parserPreset` isn't a `string`
- SvelteKit Demo App $app/* unresolved HOT 2
- 5.14.0 breaks knip in git submodules
- Documentation Site Version Selector leads to 404 HOT 2
- Support local custom plugin HOT 2
- Support import.meta.resolve (in Pino v7+ transports) HOT 3
- Unused functions are not being detected HOT 5
- Default import name being used to determine if export is used HOT 7
- Re-exported enum members incorrectly reported as unused HOT 7
- False positive when using a dynamic default importing HOT 2
- Module '"knip"' has no exported member 'KnipConfig'. Did you mean to use 'import KnipConfig from "knip"' instead? HOT 3
- "ignore" file working even though it shouldn't based on the docs HOT 4
- [Svelte@5] Knip fails to resolve `*.svelte.(j|t)s` files HOT 4
- Run the script only against the staged files. HOT 2
- `ignore` is not applied for Auto-fix HOT 1
- Not working with @emotion/styled during string interpolation HOT 1
- 'TypeError: importItems.importedAs.entries is not a function' error when using --cache, but not without the cache HOT 2
- Dependency reported as "unused" even if it's used with require.resolve(...) HOT 5
- Fails to run due to TypeError in `graphql-codegen` HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from knip.