# 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}}