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

package_manager_detector_rs

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

3 releases

0.2.7 Dec 16, 2024
0.2.6 Dec 16, 2024
0.2.5 Nov 29, 2024

#212 in Operating systems

Download history 76/week @ 2024-11-23 55/week @ 2024-11-30 9/week @ 2024-12-07 243/week @ 2024-12-14 21/week @ 2024-12-21

275 downloads per month

MIT license

28KB
499 lines

package_manager_detector_rs

Latest Version Rustc Version

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

Run the following Cargo command in your project directory:

cargo add package_manager_detector_rs

Or add the following line to your Cargo.toml:

[dependencies]
package_manager_detector_rs = "0.2.5"

Usage

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

use package_manager_detector_rs::{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::{resolve_command, 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 antfu-collective/package-manager-detector but in rust.

License

MIT License © 2024-PRESENT Muhammad Rahmahalim

Dependencies

~5–15MB
~216K SLoC