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

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

相关推荐
2501_9445255418 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
2601_9498574318 小时前
Flutter for OpenHarmony Web开发助手App实战:快捷键参考
前端·flutter
wangdaoyin201018 小时前
若依vue2前后端分离集成flowable
开发语言·前端·javascript
心柠19 小时前
vue3相关知识总结
前端·javascript·vue.js
Amumu1213819 小时前
Vue Router(二)
java·前端
a11177620 小时前
图书借阅管理系统(FastAPI + Vue)
前端·vue.js·fastapi
常年游走在bug的边缘20 小时前
掌握JavaScript作用域:从函数作用域到块级作用域的演进与实践
开发语言·前端·javascript
极致♀雨20 小时前
vue2+elementUI table表格勾选行冻结/置顶
前端·javascript·vue.js·elementui
林shir21 小时前
3-15-前端Web实战(Vue工程化+ElementPlus)
前端·javascript·vue.js
zhaoyin199421 小时前
Fiddler弱网实战
前端·测试工具·fiddler