Git Product home page Git Product logo

detect-package-manager's Introduction

detect-package-manager

NPM version NPM downloads CircleCI donate

How does this work?

  1. When there's yarn.lock, package-lock.json, pnpm-lock.yaml, or bun.lockb in current working directory, it will skip other operations and directly resolve yarn, npm, pnpm, or bun.
  2. When there's no lockfile found, it checks if yarn, pnpm, or bun command exists. If so, it resolves yarn, pnpm, or bun otherwise npm.
  3. Results are cached.

Install

yarn add detect-package-manager

Usage

const { detect } = require("detect-package-manager");

detect().then((pm) => {
  console.log(pm);
  //=> 'yarn', 'npm', or 'pnpm', 'bun'
});

API

detect([opts])

  • Arguments:
    • opts.cwd: string Optional, defaults to ., the directory to look up yarn.lock, package-lock.json, or pnpm-lock.yaml.
    • opts.includeGlobalBun: boolean Optional, defaults to false, whether to check if bun exists in PATH.
  • Returns: Promise<PM>

It returns a Promise resolving the name of package manager, could be npm, yarn, or pnpm, bun.

getNpmVersion([pm])

  • Arguments:
    • pm: string Optional, defaults to npm, could be npm, yarn, or pnpm, bun
  • Returns: Promise<string>

It returns a Promise resolving the version of npm or the package manager you specified.

clearCache()

  • Returns: void

Clear cache.

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

detect-package-manager © EGOIST, Released under the MIT License.
Authored and maintained by EGOIST with help from contributors (list).

github.com/egoist · GitHub @EGOIST · Twitter @_egoistlily

detect-package-manager's People

Contributors

cdmistman avatar egoist avatar talmidtomato avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

detect-package-manager's Issues

Request: Binary call

The idea is if I call npx detect-package-manager then it will return npm, yarn or pnpm.

So I can do this:

`npx --yes detect-package-manager` install

Using memorize

Hey. As of always reading your new repos source-code :D I realized you are using a Set to cache functions response. Pretty sure you are aware of that but just wanted to mention using memorize for easier implementation... (Closing issue as it is not that important :D)

Package manager detection fails with pnpm Turbo repo

Sorry I don't have time to issue a PR at the present, but I'll describe my situation and workaround here just in case it helps someone.

My project is a pnpm Turbo repo for use on Vercel. It's composed of several apps and packages. In a Turbo repo, even though you can install and manage packages within each of the various apps and packages, with each app and package having their own package.json, the pnpm-lock.yaml only lives in the root of the monorepo.

Therefore if you wish to use detect-package-manager in one of your apps or packages, it will fail to detect pnpm as the package manager.

The quick workaround is to insert an empty pnpm-lock.json file in the package or app you wish to use detect-package-manager. I haven't tested this yet in prod, so I guess we'll see...

Consider changing order of detecting packages

It seems odd to me that the order is yarn, pnpm, bun, and then npm.

if (hasYarn) {

npm is the most common, so I'd expect telling users to do npm install by default most of the time would be the safest option if they have multiple package managers installed. I have multiple installed because I've worked on so many different projects, but having yarn suggested to me felt super unexpected and weird. npm just seems unlikely to offend anyone since it's the standard. Alternatively, if you want to do the reverse logic and choose the least common under the assumption that people really have to be fans to install more esoteric package managers then it should be bun, pnpm, yarn, and then npm - though I think that could be a bit surprising as well. But I don't really understand why you'd tell someone with all of them installed to use yarn. Motivated by svelte-add/svelte-add#307

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.