Skip to content

antfu-collective/package-manager-detector

Repository files navigation

package-manager-detector

npm version npm downloads JSDocs License

Package manager detector is based on lock files and the packageManager field in the current project's package.json file.

It will detect your yarn.lock / pnpm-lock.yaml / package-lock.json / bun.lock / bun.lockb / deno.lock to know the current package manager and use the packageManager field in your package.json if present.

Install

# pnpm
pnpm add package-manager-detector

# npm
npm i package-manager-detector

# yarn
yarn add package-manager-detector

Usage

ESM

To check the file system for which package manager is used:

import { detect } from 'package-manager-detector/detect'

or sync version:

import { detectSync } from 'package-manager-detector/detect'

or to get the currently running package manager:

import { getUserAgent } from 'package-manager-detector/detect'

CommonJS

To check the file system for which package manager is used:

const { detect } = require('package-manager-detector/detect')

or sync version:

const { detectSync } = require('package-manager-detector/detect')

or to get the currently running package manager:

const { getUserAgent } = require('package-manager-detector/detect')

Agents and Commands

This package includes package manager agents and their corresponding commands for:

  • 'agent' - run the package manager with no arguments
  • 'install' - install dependencies
  • 'frozen' - install dependencies using frozen lockfile
  • 'add' - add dependencies
  • 'uninstall' - remove dependencies
  • 'global' - install global packages
  • 'global_uninstall' - remove global packages
  • 'upgrade' - upgrade dependencies
  • 'upgrade-interactive' - upgrade dependencies interactively: not available for npm and bun
  • 'execute' - download & execute binary scripts
  • 'execute-local' - execute binary scripts (from package locally installed)
  • 'run' - run package.json scripts

Using Agents and Commands

A resolveCommand function is provided to resolve the command for a specific agent.

import { resolveCommand } from 'package-manager-detector/commands'
import { detect } from 'package-manager-detector/detect'

const pm = await detect()
if (!pm)
  throw new Error('Could not detect package manager')

const { command, args } = resolveCommand(pm.agent, 'add', ['@antfu/ni']) // { command: 'pnpm', args: ['add', '@antfu/ni'] }
console.log(`Detected the ${pm.agent} package manager. You can run a install with ${command} ${args.join(' ')}`)

You can check the source code or the JSDocs for more information.

License

MIT License © 2020-PRESENT Anthony Fu