Comments (11)
Thanks Mathieu! Repros are great 🙏
There's two different potential solutions to this.
- Add
knip.json
with the samepaths
:
{
"paths": {
"@/*": ["./src/*"]
}
}
- Use
knip --tsConfig tsconfig.app.json
With that, I'm going to close issue.
from knip.
Ah yes, indeed dynamic import specifiers like import("components/ui/${ui}.vue")
are not supported. They might be in the future, though.
There's a few options I can think of:
- Add such files as entry files using something like
entry: ["components/ui/*.vue"]
- entry files are always "used" - Remove them files from the project files, e.g.
project: ["!components/ui/*.vue"]
from knip.
The named import of humanFormat
is enough for Knip to consider it referenced/used. So something else might be the culprit here, such as the way the vue file is imported, or the path aliases. So I'd need a proper reproduction to look into it and say something more useful about this.
from knip.
Hello,
May be an issue with the tsconfig.json
configuration created by https://github.com/vuejs/create-vue
The alias path are in tsconfig.app.json
and not in the tsconfig.json
tsconfig.json
:
{
"files": [],
"references": [
{
"path": "./tsconfig.node.json"
},
{
"path": "./tsconfig.app.json"
}
]
}
tsconfig.app.json
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"include": ["env.d.ts", "src/**/*", "src/**/*.vue", "src/**/*.json"],
"exclude": ["src/**/__tests__/*"],
"compilerOptions": {
"composite": true,
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
Repro : https://stackblitz.com/edit/vitejs-vite-dpq56w?file=tsconfig.app.json
❯ npx knip
Analyzing workspace ....
Unused files (2)
src/vite-env.d.ts
src/components/HelloWorld.vue
Unresolved imports (1)
@/components/HelloWorld.vue src/App.vue:1:23
Regards
Mathieu
from knip.
Nothing changed unfortunately. Added the "path" entry to knip.json and executed knip with --tsConfig
BTW, tsconfig.json already contains the "path" entry.
from knip.
Without a minimal reproduction like @messenjer provided there isn't much to look for me.
from knip.
@webpro Here is a minimal reproduction. The vue project has been generated with npm create vue@latest
.
Rename the attached zip file
unused.txt
to unused.zip
and unzip it. This creates the vue-project
directory. Then do:
cd vue-project
npm install
knip
You will see that the file src/HumanFormat.ts
has been marked as unused, but it is imported in HelloWorld.vue
component where its exported routine is used only in the <template>
section.
Thanks for your patience!
mario
from knip.
$ knip --version
5.24.1
on Windows
from knip.
Typo?
<script setup lang="ts">
import { numanFormat } from '../HumanFormat.ts';
</script>
from knip.
Opps, yes.
<script setup lang="ts">
import { humanFormat } from '../HumanFormat.ts';
</script>
So the reproduction failed. I should add more pieces from the original project...
from knip.
Red face. Have found why this file ("@/services/HumanFormat"
) is accounted as unused by knip. Because it is only used by components that are loaded dynamically (with something like: defineAsyncComponent(import(components/ui/${ui}.vue
) and thus considered unused.
If only knip had a way to manually mark files as used even if they cannot be found by knip!
Anyway, thanks for the patience and continue with this useful tool!
from knip.
Related Issues (20)
- 🔄 Issue links are broken HOT 4
- 🐛 False positive for `unlisted` when extending a tsconfig file from a package HOT 4
- (PostCSS plugin): Add `postcss` to `referencedDependencies` when using Tailwind CSS with PostCSS HOT 2
- 💡 Add option to ignore export names using a pattern HOT 1
- 🐛 Soft-linked dependencies are considered unused HOT 2
- 🐛 Abstracted lazy imports are not detected HOT 1
- 💡 Replace `fast-glob` by `tinyglobby` HOT 5
- 🐛 false positive in Astro when an import follows an import assertion import HOT 2
- Knip doesn't enable Vue plugin in Nuxt 🐛 HOT 6
- 🐛 Dev dependencies are reported as unused HOT 1
- 🔄 Regression on importing from subdirectory of a package in node_modules HOT 5
- 💡 Have a mode or configuration option that allows for monorepos that install deps at the root HOT 5
- 🐛 Not following `references` in TS config files HOT 13
- 💡 Follow `references` in TS config file. HOT 1
- 🐛 Webpack config not found when it's not in root folder HOT 4
- 💡 `ignoreImportsUsedInFiles: []` HOT 1
- 💡 docs should have hover links HOT 2
- 🐛 `vitest.workspace.mts` Not Dectected by Vitest Plugin HOT 2
- 🐛 Impossible to Ignore Env Var False Positives in Yarn Scripts HOT 2
- 💡 Support `jsconfig.json` for import path aliases by default HOT 1
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.