Add Bun as package manager to npm extension

* Auto-detect Bun by looking for `bun.lockb` lockfile
* Extend `npm.packageManager` setting
* Update documentation

Signed-off-by: Marvin A. Ruder <signed@mruder.dev>
This commit is contained in:
Marvin A. Ruder 2023-11-11 16:36:19 +00:00
parent 55c1e8473c
commit 4645305f14
Failed to extract signature
4 changed files with 20 additions and 3 deletions

View File

@ -34,7 +34,7 @@ The extension fetches data from <https://registry.npmjs.org> and <https://regist
- `npm.autoDetect` - Enable detecting scripts as tasks, the default is `on`.
- `npm.runSilent` - Run npm script with the `--silent` option, the default is `false`.
- `npm.packageManager` - The package manager used to run the scripts: `auto`, `npm`, `yarn` or `pnpm`, the default is `auto`, which detects your package manager based on your files.
- `npm.packageManager` - The package manager used to run the scripts: `auto`, `npm`, `yarn`, `pnpm` or `bun`. The default is `auto`, which detects your package manager based on files in your workspace.
- `npm.exclude` - Glob patterns for folders that should be excluded from automatic script detection. The pattern is matched against the **absolute path** of the package.json. For example, to exclude all test folders use '&ast;&ast;/test/&ast;&ast;'.
- `npm.enableScriptExplorer` - Enable an explorer view for npm scripts.
- `npm.scriptExplorerAction` - The default click action: `open` or `run`, the default is `open`.

View File

@ -237,13 +237,15 @@
"auto",
"npm",
"yarn",
"pnpm"
"pnpm",
"bun"
],
"enumDescriptions": [
"%config.npm.packageManager.auto%",
"%config.npm.packageManager.npm%",
"%config.npm.packageManager.yarn%",
"%config.npm.packageManager.pnpm%"
"%config.npm.packageManager.pnpm%",
"%config.npm.packageManager.bun%"
],
"default": "auto",
"description": "%config.npm.packageManager%"

View File

@ -9,6 +9,7 @@
"config.npm.packageManager.npm": "Use npm as the package manager for running scripts.",
"config.npm.packageManager.yarn": "Use yarn as the package manager for running scripts.",
"config.npm.packageManager.pnpm": "Use pnpm as the package manager for running scripts.",
"config.npm.packageManager.bun": "Use bun as the package manager for running scripts.",
"config.npm.packageManager.auto": "Auto-detect which package manager to use for running scripts based on lock files and installed package managers.",
"config.npm.exclude": "Configure glob patterns for folders that should be excluded from automatic script detection.",
"config.npm.enableScriptExplorer": "Enable an explorer view for npm scripts when there is no top-level 'package.json' file.",

View File

@ -23,6 +23,14 @@ async function pathExists(filePath: string) {
return true;
}
async function isBunPreferred(pkgPath: string): Promise<PreferredProperties> {
if (await pathExists(path.join(pkgPath, 'bun.lockb'))) {
return { isPreferred: true, hasLockfile: true };
}
return { isPreferred: false, hasLockfile: false };
}
async function isPNPMPreferred(pkgPath: string): Promise<PreferredProperties> {
if (await pathExists(path.join(pkgPath, 'pnpm-lock.yaml'))) {
return { isPreferred: true, hasLockfile: true };
@ -78,6 +86,12 @@ export async function findPreferredPM(pkgPath: string): Promise<{ name: string;
detectedPackageManagerProperties.push(yarnPreferred);
}
const bunPreferred = await isBunPreferred(pkgPath);
if (bunPreferred.isPreferred) {
detectedPackageManagerNames.push('bun');
detectedPackageManagerProperties.push(bunPreferred);
}
const pmUsedForInstallation: { name: string } | null = await whichPM(pkgPath);
if (pmUsedForInstallation && !detectedPackageManagerNames.includes(pmUsedForInstallation.name)) {