pnpm approve-builds报错

首次安装依赖或某些依赖的构建脚本被忽略时,pnpm 会拦截这些脚本的自动执行,并提示您运行 pnpm approve-builds 来选择允许哪些包运行脚本。这通常发生在项目依赖中包含可能执行敏感操作的包时

1. ‌pnpm 安全机制

  • 默认行为 ‌:pnpm 会拦截 postinstall 等敏感脚本,防止自动执行潜在恶意代码3。这导致依赖包的构建脚本(如 core-jsesbuild)被忽略。
  • 触发条件‌:当安装的依赖包包含构建脚本时,pnpm 会提示需要手动批准23。

2. ‌差异原因

  • 环境差异‌:另一个项目可能未触发此安全机制,原因可能包括:

    • 依赖包不同 ‌:未包含 core-jsesbuild 等需要构建脚本的依赖2。
    • pnpm 版本差异‌:旧版本 pnpm 可能未启用此安全特性2。
    • 配置差异 ‌:项目根目录存在 .npmrc 文件,配置了 allowed-dep-scripts 参数允许特定依赖脚本运行45。
    • CI/CD 环境 ‌:CI 环境可能通过环境变量(如 CI=true)或脚本(如 pnpm approve-builds)自动批准构建脚本36。

3. ‌解决方案

  • 临时允许 ‌:在安装命令后添加 --unsafe-perm 参数(不推荐,范围太广)4。
  • 永久配置 ‌:在项目根目录创建 .npmrc 文件,添加 allowed-dep-scripts=core-js,esbuild45。
  • 手动批准 ‌:运行 pnpm approve-builds 命令,交互式选择允许的依赖(输入 a 允许全部)26。

4. ‌安全建议

  • 风险评估 ‌:确保批准的构建脚本(如 core-jsesbuild)来自可信来源3。
  • 版本更新‌:检查 pnpm 是否为最新版本,旧版本可能存在安全漏洞2。

解决步骤

  1. 运行命令‌:在项目根目录下执行以下命令:

    css 复制代码
    bashCopy Code
    pnpm approve-builds

    执行后,终端会进入一个交互式界面,列出被忽略的依赖包(例如 core-jsesbuild@vue-office/docx 等)。‌12

  2. 选择依赖‌:

    • 允许全部依赖 ‌:直接输入 a(代表 all),然后按回车。这是最快捷的方式,适用于您信任所有列出的包。‌24
    • 选择性允许 ‌:使用空格键( )勾选特定包,再按回车。例如,如果只信任 core-jsesbuild,可勾选它们后确认。‌12
  3. 重新安装并构建 ‌:

    完成选择后,重新安装依赖并运行构建:

    arduino 复制代码
    bashCopy Code
    pnpm install && pnpm run build

    被批准的依赖将正常执行脚本,构建应成功。‌‌

相关推荐
ZC跨境爬虫6 小时前
跟着 MDN 学CSS day_3:(为一个传记页面添加样式)
前端·javascript·css·ui·音视频·html5
从文处安7 小时前
「前端何去何从」混乱到有序的状态管理: Reducer 与 Context
前端·react.js
名字都不重要何况昵称7 小时前
Color Pick 2D(多 Canvas 像素拾取)
前端·canvas
BY组态8 小时前
Ricon组态系统技术深度解析:打造高性能Web可视化平台
前端·物联网·iot·web组态·组态
山屿落星辰8 小时前
Flutter 高级特性实战:动画、自定义绘制、平台通道与 Web 优化
前端·flutter
@菜菜_达9 小时前
jquery.inputmask插件介绍
前端·javascript·jquery
QuZhengRong9 小时前
【Luck-Report】缓存
java·前端·后端·vue·excel
jiayong239 小时前
前端面试题库 - 浏览器与网络篇
前端·网络·面试
Csvn9 小时前
小程序开发:微信小程序与 uni-app 实战指南
前端
摸鱼小李上线了9 小时前
vue项目页面添加水印实现方法
前端·javascript·vue.js