# Configurable Strategies
## Summary
Introduce a new config (ex.`--strategy` or `--mode`) which consolidates the logic behind changes to dependency resolution & reification.
#### Types of `strategies`
* default/hoist `--strategy=hoist-and-dedupe` (~similar != **yarn**'s `--flat` && **yarn@2**'s `package.installConfig.hoistingLimits`)
* global `--strategy=global` && `--global-style` (~similar != **pnpm**'s `hoist` )
* no-hoist `--strategy=no-hoist` && `--legacy-bundling` (~similar != to **yarn**'s `package.workspace` `nohoist` option)
## Motivation
Today, we currently have two competing flags which conversely change the behaviour of `npm install` (ie.`--global-style` & `--legacy-bundling`) when both are defined. Consolidate these into a single config which will clean up the implementation, understanding & unlock future potential for innovation.
## Detailed Explanation
{{Describe the expected changes in detail, }}
## Rationale and Alternatives
{{Discuss 2-3 different alternative solutions that were considered. This is required, even if it seems like a stretch. Then explain why this is the best choice out of available ones.}}
## Implementation
{{Give a high-level overview of implementation requirements and concerns. Be specific about areas of code that need to change, and what their potential effects are. Discuss which repositories and sub-components will be affected, and what its overall code effect might be.}}
{{THIS SECTION IS REQUIRED FOR RATIFICATION -- you can skip it if you don't know the technical details when first submitting the proposal, but it must be there before it's accepted}}
#### Examples:
- tree shape + commands + results `npm install --`
## Prior Art
{{This section is optional if there are no actual prior examples in other tools}}
{{Discuss existing examples of this change in other tools, and how they've addressed various concerns discussed above, and what the effect of those decisions has been}}
* `hoist` is similar != **yarn**'s `--flat` && **yarn@2**'s `package.installConfig.hoistingLimits`
* `global` (~similar != **pnpm**'s `hoist` )
* `no-hoist` is ~similar != to **yarn**'s `package.workspace` `nohoist` option
## Unresolved Questions and Bikeshedding
{{Write about any arbitrary decisions that need to be made (syntax, colors, formatting, minor UX decisions), and any questions for the proposal that have not been answered.}}
{{THIS SECTION SHOULD BE REMOVED BEFORE RATIFICATION}}