feat: back to environmentPlugins hook #16732
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
We're discussing about the API for per-environment plugins. We're seeing that using the functional version is making things quite hard for back compat and typing. This is an example returning a shared plugin and a per environment one
The function looks quite nice, especially for inline plugins, but it has issues:
Object.defineProperty()
(we would need this if we want to use per environment plugins in our internal plugins likevite:reporter
, if we want to support filtering)config.plugins
will be a mix ofPlugin | IsolatedPluginConstructor
, and it breaks several ecosystem usage.apply
in the function andapply
in the object with same name but diff meaningenforce
in the returned plugins, respecting the original position but is is really hard to do and full with edge cases. So we actually needenforce
at the function plugins level.We are thinking to get back to using a new hook to inject per environment plugins instead
This should still be quite nice for authoring, and it is explicit given the new hook name. A shared plugin can both have
configureServer
and return per environment plugins without the need of an array. All other plugin fields work as expected (enforce
,apply
,name
, etc).It was still good to try both options. The object form plus new hook is easier to work with for back compat. There may be some cases where ignoring the
environmentPlugins
hook could cause issues, but in most cases ofconfig.plugins
modification, it will work as is.