项目中如何强制使用pnpm

. 使用 packageManager 字段(推荐)

在项目的 package.json 中添加 packageManager 字段(官方规范):

perl 复制代码
{
  "packageManager": "pnpm@9.15.7"
}

2. 添加 preinstall 脚本(强制拦截)

package.jsonscripts 中加入一个 preinstall 脚本,检测当前是否为 pnpm:

json 复制代码
{
  "scripts": {
    "preinstall": "npx only-allow pnpm"
  }
}

only-allow 是一个轻量工具,会阻止使用 npm/yarn 安装依赖

  • 当有人运行 npm installyarn 时,会直接报错并退出。
  • 需要确保 only-allow 本身不需要被安装(它由 npx 临时调用)。

3. 文档说明 + .npmrc(辅助)

  • 在 README 中明确说明:"本项目使用 pnpm,请先安装 pnpm 并使用 pnpm install 安装依赖"。

  • 可选:在项目根目录添加 .npmrc 文件,设置:

    禁用 npm 自动安装 peerDependencies(pnpm 默认行为)

    并提醒用户不要用 npm

虽然不能强制阻止,但可配合其他方式增强提示。

总结(推荐组合)

json 复制代码
// package.json
{
  "packageManager": "pnpm@9.15.7",
  "scripts": {
    "preinstall": "npx only-allow pnpm"
  }
}

这样既符合现代规范,又能强制拦截错误的安装方式,适合团队协作项目。

相关推荐
橙序员小站13 分钟前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
炫饭第一名3 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫3 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊3 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter3 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
曲折3 小时前
Cesium-气象要素PNG色斑图叠加
前端·cesium
Forever7_3 小时前
Electron 淘汰!新的桌面端框架 更强大、更轻量化
前端·vue.js
Angelial4 小时前
Vue3 嵌套路由 KeepAlive:动态缓存与反向配置方案
前端·vue.js
jiayu4 小时前
Angular学习笔记24:Angular 响应式表单 FormArray 与 FormGroup 相互嵌套
前端
jiayu4 小时前
Angular6学习笔记13:HTTP(3)
前端