#package-json #yarn #bun #deno #npm #pnpm

package_manager_detector_rs

Detect the package manager in use by identifying the associated package.json or lockfile

1 unstable release

0.2.5 Nov 29, 2024

#233 in Operating systems

Download history 76/week @ 2024-11-23 53/week @ 2024-11-30

129 downloads per month

Custom license

21KB
306 lines

package_manager_detector_rs

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.lockb / deno.lock to know the current package manager and use the packageManager field in your package.json if present.

Install

WIP

Usage

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

use package_manager_detector_rs::detect::{detect};

fn main() {
    let pm = detect();
    if pm.is_none() {
        println!("Could not detect package manager")
    }

    println!("{:?}", pm);
    // HandlePackageManagerReturn { 
    //     name: "yarn", agent: "yarn@berry", version: "berry"
    // }
}

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 resolve_command function is provided to resolve the command for a specific agent.

use package_manager_detector_rs::commands::{resolve_command};
use package_manager_detector_rs::detect::{detect};

fn main() {
    let pm = detect();
    if pm.is_none() {
        println!("Could not detect package manager")
    }

    println!("{:?}", pm);
    // HandlePackageManagerReturn {
    //     name: "yarn", agent: "yarn@berry", version: "berry"
    // }

    let agent = pm.unwrap().agent;
    let get_command = resolve_command(&agent, "add", vec!["@antfu/ni"]);
    let get_command = get_command.unwrap();
    
    println!("Detected the {} package manager. You can run a install with {} {}", &agent, get_command.command, get_command.args.join(" "))
    // Detected the yarn@berry package manager. You can run a install with yarn add @antfu/ni
}

You can check the source code for more information.

Credit

package_manager_detector_rs is currently being developed and maintained by Muhammad Rahmahalim.
This project is like package-manager-detector (Anthony Fu) but in rust.

License

MIT License © 2024-PRESENT Muhammad Rahmahalim

Dependencies

~5–15MB
~206K SLoC