Skip to content
快速预览

限制项目只能使用pnpm

✍️ w 🕒 2023-09-28 06:18:45(8 months ago) 🔗 H.各种练习项目

如果你想限制统一团队使用的包管理工具,可以创建校验脚本,创建文件 scripts/preinstall.js,编写代码

process.env.npm_execpath 是一个 Node.js 环境变量,它包含了执行 npm(或兼容的包管理工具,如 yarn、pnpm 等)命令时的完整路径。这个环境变量在 npm 的生命周期脚本(如 preinstall、install、postinstall 等)中可用。

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

// if (/yarn/.test(process.env.npm_execpath || '')) {
//   // 执行适用于 yarn 的代码
// } else if (/npm/.test(process.env.npm_execpath || '')) {
//   // 执行适用于 npm 的代码
// }

在package.json 使用脚本指令, preinstall 是一个在 Node.js 的 npm(或其他兼容的包管理工具,如 yarn、pnpm 等)生命周期脚本中使用的钩子。当你运行 npm install 或者在项目中添加一个新的依赖时, preinstall 脚本会在实际安装依赖之前执行

js
"scripts": {
    "preinstall": "node ./scripts/preinstall.js"
  },

pnpm 自带检查指令

当您在项目中使用 pnpm 时,为了防止开发人员使用其他包管理器,可以在 package.json 中添加以下预安装脚本 Only allow pnpm

json
{
    "scripts": {
        "preinstall": "npx only-allow pnpm"
    }
}

Released under the MIT License.