Comments (8)
By the way I try to minimize reading things like process.env
to maximize being runtime agnostic (e.g. run in Bun, Deno, whatnot).
from knip.
By "breaks" you mean currentEnv
is true
instead of e.g. development
, right?
Other than that, the idea seems sound to me: Knip will receive a configuration where all dependencies for all environments are included. How else could Knip figure this out in a single run? In general you don't want to run Knip multiple times I guess.
Having that said, and looking at Babel source code, I think the function should be something like this:
{
env: (env: string) => typeof env === 'string' ? true : 'development'
}
Would you agree?
from knip.
@webpro yes, completely. I'm not entirely sure if the default should be 'development'.
If we can use the environment variable that is actually passed to knip, the better. If not, 'development' should work.
from knip.
That default value I got here: https://github.com/babel/babel/blob/main/packages/babel-core/src/config/helpers/environment.ts
The fix will come with the next release.
from knip.
@webpro Got it. Thank you 🙌
from knip.
@webpro Now that I think about it, I think returning true
for all environments might cause some babel configurations to be invalid. Developers use isDevelopment
, isProduction
kind of variables to configure plugins for babel. If we are returning just true
for all environments, I would assume this causes at least some configurations to be invalid.
I would expect something like Babel's own implementation of the function.
// Since we decided we aren't fetching from process
const defaultEnv = "development";
const env: EnvFunction = (
value: string | string[] | (<T>(babelEnv: string) => T)
) => {
if (typeof value === "undefined") return defaultEnv;
if (typeof value === "function") {
return value(defaultEnv);
}
return (Array.isArray(value) ? value : [value]).some((entry) => {
if (typeof entry !== "string") {
throw new Error("Unexpected non-string value");
}
return entry === defaultEnv;
});
};
from knip.
Other than that, the idea seems sound to me: Knip will receive a configuration where all dependencies for all environments are included. How else could Knip figure this out in a single run? In general you don't want to run Knip multiple times I guess.
Yes in theory things might break, but so far so good, haven't received other issues around this.
from knip.
🚀 This issue has been resolved in v5.10.0-canary.1. See Release 5.10.0-canary.1 for release notes.
Using Knip in a commercial project? Please consider sponsoring me.
from knip.
Related Issues (20)
- Programatically Run HOT 1
- Re-exports with usage of barrel files isn't indexed correctly HOT 6
- Support for external plugins HOT 1
- 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
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.