npm.io
1.0.9 • Published 2 months ago

@yarn-tool/detect-package-manager

Licence
ISC
Version
1.0.9
Deps
3
Size
51 kB
Vulns
0
Weekly
0
Stars
14

@yarn-tool/detect-package-manager

使用 which 命令偵測系統中可用的套件管理器(yarn、npm、pnpm)

Detect available package manager (yarn, npm, pnpm) in system using which command

功能 (Features)

  • 支援偵測 yarn、npm、pnpm 三種套件管理器
  • 提供同步與非同步兩種偵測方式
  • 支援自訂套件管理器優先順序
  • 可取得第一個可用的套件管理器或所有可用的套件管理器
  • 支援回傳命令路徑資訊

類型 (Types)

IPackageManager

套件管理器類型 (Package manager type)

type IPackageManager = 'yarn' | 'npm' | 'pnpm';
IResultDetectPackageManagerRaw

偵測結果類型,包含套件管理器名稱和命令路徑

type IResultDetectPackageManagerRaw = readonly [IPackageManager, string?];
IOptionsWhichPackageManager

選項配置類型 (Options configuration type)

interface IOptionsWhichPackageManager {
  /** 當找不到時是否返回預設值 / Whether to return default when not found */
  returnDefault?: boolean;
  /**
   * 只使用使用者指定的套件管理器
   * 不合併使用者指定的優先順序與預設順序
   */
  noUseDefaultClients?: boolean;
}
IRuntimeOptionInput

_runtime 選項輸入類型 - 可接受布林值或 IOptionsWhichPackageManager 物件

type IRuntimeOptionInput = boolean | IOptionsWhichPackageManager;

API (API)

whichPackageManagerSync(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): IPackageManager | undefined

同步偵測第一個可用的套件管理器

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): 第一個可用的套件管理器名稱或 undefined

whichPackageManagerSyncAll(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): IPackageManager[]

同步偵測所有可用的套件管理器

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): 所有可用的套件管理器陣列

whichPackageManagerAsync(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): Promise

非同步偵測第一個可用的套件管理器

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): Promise resolves to 第一個可用的套件管理器名稱或 undefined

whichPackageManagerAsyncAll(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): Promise<IPackageManager[]>

非同步偵測所有可用的套件管理器

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): Promise resolves to 所有可用的套件管理器陣列

_whichPackageManagerSyncGenerator(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): Generator

同步生成器版本,回傳包含路徑的結果

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): Generator yields [packageManager, commandPath] tuples

_whichPackageManagerAsyncGenerator(npmClients?: IPackageManager[], returnDefaultOrOptions?: IRuntimeOptionInput): AsyncGenerator

非同步生成器版本,回傳包含路徑的結果

參數 (Parameters):

  • npmClients?: 自訂套件管理器列表(可選)/ Custom package manager list (optional)
  • returnDefaultOrOptions?: 選項輸入 (布林值或 IOptionsWhichPackageManager 物件)(可選)/ Options input (boolean or IOptionsWhichPackageManager object) (optional)

回傳 (Returns): AsyncGenerator yields [packageManager, commandPath] tuples

安裝 (Installation)

# 使用 yarn / Using yarn
yarn add @yarn-tool/detect-package-manager

# 使用 yarn-tool / Using yarn-tool
yarn-tool add @yarn-tool/detect-package-manager
# yt 是 yarn-tool 的別名 / yt is an alias for yarn-tool
yt add @yarn-tool/detect-package-manager

# 使用 pnpm / Using pnpm
pnpm add @yarn-tool/detect-package-manager

# 使用 npm / Using npm
npm install @yarn-tool/detect-package-manager

範例 (Examples)

import {
  whichPackageManagerSync,
  whichPackageManagerSyncAll,
  whichPackageManagerAsync,
  whichPackageManagerAsyncAll,
  _whichPackageManagerSyncGenerator,
  _whichPackageManagerAsyncGenerator,
} from '@yarn-tool/detect-package-manager';

// 同步偵測第一個可用的套件管理器
const pm = whichPackageManagerSync();
console.log(pm); // 'pnpm' | 'yarn' | 'npm' | undefined

// 同步偵測所有可用的套件管理器
const pmAll = whichPackageManagerSyncAll();
console.log(pmAll); // ['pnpm', 'yarn', 'npm']

// 非同步偵測
const pmAsync = await whichPackageManagerAsync();
console.log(pmAsync); // 'pnpm' | 'yarn' | 'npm' | undefined

// 自訂優先順序
const pmCustom = whichPackageManagerSync(['yarn', 'pnpm', 'npm']);
console.log(pmCustom); // 會按照自訂順序偵測

// 使用生成器取得路徑資訊
for (const [pm, path] of _whichPackageManagerSyncGenerator()) {
  console.log(`Found ${pm} at ${path}`);
}

// 非同步生成器
for await (const [pm, path] of _whichPackageManagerAsyncGenerator()) {
  console.log(`Found ${pm} at ${path}`);
}

// 使用布林值參數 - 當找不到時返回預設值
const pmWithDefault = whichPackageManagerSync(['yarn'], true);
console.log(pmWithDefault); // 如果 yarn 找不到,會返回 'pnpm' (預設順序的第一個)

// 使用選項物件參數
const pmWithOptions = whichPackageManagerSync(['yarn'], {
  returnDefault: true,
  noUseDefaultClients: false,
});
console.log(pmWithOptions);

Keywords