Code Monkey home page Code Monkey logo

Comments (8)

webpro avatar webpro commented on September 23, 2024 1

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.

webpro avatar webpro commented on September 23, 2024

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.

agneym avatar agneym commented on September 23, 2024

@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.

webpro avatar webpro commented on September 23, 2024

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.

agneym avatar agneym commented on September 23, 2024

@webpro Got it. Thank you 🙌

from knip.

agneym avatar agneym commented on September 23, 2024

@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.

webpro avatar webpro commented on September 23, 2024

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.

webpro avatar webpro commented on September 23, 2024

🚀 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)

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.