Giter Site home page Giter Site logo

Comments (3)

mdonnalley avatar mdonnalley commented on May 27, 2024 2

I see. Thanks for the clarification.

I have a few thoughts:

  • We have plugin-update which handles auto updates. It also uses the init hook but there's no guard against concurrent hooks. However, it's designed to run behind the scenes (i.e. it updates the CLI while the user isn't actively using it) so it should be less of an issue. The update schedule is also hardcoded to every 14 days which may or may not work for your needs.
  • Is it possible to migrate your init hooks to prerun hooks (except for the one in the root plugin)? That would ensure that the top level one is always run before any other hooks
  • I could see adding an option to the oclif config for prioritizing hooks defined by the root plugin. This would tell oclif to first run hooks defined in the root plugin before going on to run all other hooks in parallel.

Generally speaking, I'd prefer if you were able to make either of the first two work for you since it would mean less code to maintain and fewer features to document. But if you decide you need the 3rd option or some variation of it, you'll need to submit the PR yourself as we don't have the ability to prioritize it on our side at this time. However, I'm more than happy to review it whenever it's ready

from core.

mdonnalley avatar mdonnalley commented on May 27, 2024

@william-will-angi So essentially you want the option to execute hooks based on some order?

There is some precedence for this in how we determine which command to execute when two different plugins define the same command: https://github.com/oclif/core/blob/v1.9.5/src/config/config.ts#L680

The same or similar logic could be applied to hooks. It might be as simple as sorting the plugins here https://github.com/oclif/core/blob/v1.9.5/src/config/config.ts#L275

If that approach works, I don't believe either of the downsides you listed will be an issue

from core.

william-will-angi avatar william-will-angi commented on May 27, 2024

Thank you for the speedy reply! Executing the hooks in a specific order is part of what we're looking for, but we also want to be able to configure resolution order as well.

For a bit more context:
We currently have an auto-updating init hook that lives in our root CLI application. This hook is async and we want to ensure that it gets run and resolved before attempting any other init hooks. So we are looking for the option to execute AND resolve hooks in a particular order.
From the second link you posted, it seems like all async hooks are executed in parallel,
which I think is a good default for the best performance assuming the hooks are designed to be independent of each other.

In general, we do want our init hooks to be independent and run in parallel, it's just this singular one that we want to make sure executes and resolves before any others.

from core.

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.