Comments (3)
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 toprerun
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.
@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.
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)
- topicSeparator space generates wrong message when used alongside usage HOT 1
- Upgrading to a version after 3.20.0 causes issues with hooks HOT 3
- (help): show arg/flag options if user didn't provide any HOT 1
- Command summary displays as topic summary when nested below topic without summary. HOT 1
- Unable to run dev.js outside of the project folder
- BaseCommand Documentation HOT 3
- Errors on command load should throw errors instead of invalidating the command HOT 6
- SimpleAction does not write newline for status change HOT 7
- [BUG]The issue of ux.prompt handling special characters. HOT 3
- Can't run development mode with bun HOT 2
- RangeError on ux.table when column starts with emoji HOT 1
- ux.Table: Incorrect parsing of double quotes when exporting to CSV HOT 3
- ux.table `maxWidth` column option HOT 2
- CliUx.ux.prompt text truncation HOT 3
- Build failure with `exactOptionalPropertyTypes` enabled HOT 5
- [Feature request] Alias a single flag to a set of multiple flags HOT 1
- Getting MaxListenersExceededWarning: Possible EventEmitter memory leak detected. after updating to latest version of oclif HOT 2
- Error bundling @oclif/core into my project HOT 15
- UX tables get displayed along with json output on usage of --json flag HOT 2
- Specify different oclif options for dev and run HOT 6
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 core.