Home > Web Front-end > JS Tutorial > [Organization and sharing] How to determine which npm package manager is currently used

[Organization and sharing] How to determine which npm package manager is currently used

青灯夜游
Release: 2023-02-01 20:00:35
forward
2250 people have browsed it

How to determine the current npm package manager? The following article will share with you how to determine which npm package manager you are currently using. I hope it will be helpful to you.

[Organization and sharing] How to determine which npm package manager is currently used

It is more common to use npm for dependency installation. However, as the size and number of projects increase, npm will have problems with slow installation speed and excessive size. Using package managers such as yarn and pnpm can solve the above problems.

If you want to force team members to use the same package manager, or if you want to handle different logic for different package managers. You need to determine which package manager you are currently using.

Implementation method

Vue warehouse Currently, developers are forced to use pnpm, and the implementation method is also very clever.

First, when running npm script, run the pre-script through the built-in pre command, and obtain the package through process.env.npm_execpath in the pre-script The file path of the manager to determine the type of package manager used by the developer. [Related tutorial recommendations: nodejs video tutorial]

The relevant code is as follows:

// package.json
"scripts": {
    "preinstall": "node ./scripts/preinstall.mjs",
},
Copy after login
// preinstall.mjs
if (!/pnpm/.test(process.env.npm_execpath || '')) {
  console.warn(
    `\u001b[33mThis repository requires using pnpm as the package manager ` +
      ` for scripts to work properly.\u001b[39m\n`
  )
  process.exit(1)
}
Copy after login
Copy after login

pre command

in package.json , we should be very familiar with how npm script runs.

"scripts": {
    "dev": "vite",
},
Copy after login

By reading the above code, we can run the script through npm run dev.

In addition to custom script names, npm also has two built-in pre and post instructions, which splice pre before the custom name. You can implement the pre-hook instructions.

"scripts": {
    "dev": "vite",
    "predev": "node predev.js"
    "postdev": "node postdev.js"
},
Copy after login

When you run the npm run dev command like this, the terminal will automatically run npm run predev first, then npm run dev, and finally Run npm run postdev. In this way, we can judge the package manager before running the custom script.

process.env.npm_execpath

Before vue@3.2.20, Vue’s package manager was yarn, and later it was changed to pnpm.

When using yarn, the code checked by the package manager is:

// scripts/checkYarn.js
if (!/yarn\.js$/.test(process.env.npm_execpath || '')) {
    console.warn(
    '\u001b[33mThis repository requires Yarn 1.x for scripts to work properly.\u001b[39m\n'
  )
  process.exit(1)
}
Copy after login

When changed to pnpm, the code checked by the package manager is:

// preinstall.mjs
if (!/pnpm/.test(process.env.npm_execpath || '')) {
  console.warn(
    `\u001b[33mThis repository requires using pnpm as the package manager ` +
      ` for scripts to work properly.\u001b[39m\n`
  )
  process.exit(1)
}
Copy after login
Copy after login

By comparison, vue is The type of package manager can be determined through process.env.npm_execpath. By obtaining the path of the package manager and using keyword search, the type of package management can be determined.

Summary

By using the Vue warehouse, we can use the npm script built-in pre The command runs the pre-script. In the pre-script, use process.env.npm_execpath to obtain the file path of the package manager to determine the type of package manager used by the developer.

For more node-related knowledge, please visit: nodejs tutorial!

The above is the detailed content of [Organization and sharing] How to determine which npm package manager is currently used. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:juejin.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template