mirror of
https://github.com/oven-sh/bun
synced 2026-02-02 15:08:46 +00:00
implement publicHoistPattern and hoistPattern (#23567)
### What does this PR do? Adds support for `publicHoistPattern` in `bunfig.toml` and `public-hoist-pattern` from `.npmrc`. This setting allows you to select transitive packages to hoist to the root node_modules making them available for all workspace packages. ```toml [install] # can be a string publicHoistPattern = "@types*" # or an array publicHoistPattern = [ "@types*", "*eslint*" ] ``` `publicHoistPattern` only affects the isolated linker. --- Adds `hoistPattern`. `hoistPattern` is the same as `publicHoistPattern`, but applies to the `node_modules/.bun/node_modules` directory instead of the root node_modules. Also the default value of `hoistPattern` is `*` (everything is hoisted to `node_modules/.bun/node_modules` by default). --- Fixes a determinism issue constructing the `node_modules/.bun/node_modules` directory. --- closes #23481 closes #6160 closes #23548 ### How did you verify your code works? Added tests for - [x] only include patterns - [x] only exclude patterns - [x] mix of include and exclude - [x] errors for unexpected expression types - [x] excluding direct dependency (should still include) - [x] match all with `*` - [x] string and array expression types --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
@@ -1755,6 +1755,13 @@ cache = "${join(dir, ".bun-cache").replaceAll("\\", "\\\\")}"
|
||||
bunfig += `registry = "${this.registryUrl()}"\n`;
|
||||
}
|
||||
bunfig += `linker = "${opts.isolated ? "isolated" : "hoisted"}"\n`;
|
||||
if (opts.publicHoistPattern) {
|
||||
if (typeof opts.publicHoistPattern === "string") {
|
||||
bunfig += `publicHoistPattern = "${opts.publicHoistPattern}"`;
|
||||
} else {
|
||||
bunfig += `publicHoistPattern = [${opts.publicHoistPattern.map(p => `"${p}"`).join(", ")}]`;
|
||||
}
|
||||
}
|
||||
await write(join(dir, "bunfig.toml"), bunfig);
|
||||
}
|
||||
}
|
||||
@@ -1763,6 +1770,7 @@ type BunfigOpts = {
|
||||
saveTextLockfile?: boolean;
|
||||
npm?: boolean;
|
||||
isolated?: boolean;
|
||||
publicHoistPattern?: string | string[];
|
||||
};
|
||||
|
||||
export async function readdirSorted(path: string): Promise<string[]> {
|
||||
|
||||
Reference in New Issue
Block a user