pnpm approve-builds报错

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

1. ‌pnpm 安全机制‌

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

2. ‌差异原因‌

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

    • ‌依赖包不同 ‌:未包含 core-js、esbuild 等需要构建脚本的依赖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-js、esbuild)来自可信来源3。
  • ‌版本更新‌:检查 pnpm 是否为最新版本,旧版本可能存在安全漏洞2。

解决步骤

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

    css 复制代码
    bashCopy Code
    pnpm approve-builds

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

  2. ‌选择依赖‌:

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

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

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

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

相关推荐
jktantan4 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
前端·javascript·vue.js
2601_962885725 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel6 小时前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓6 小时前
调用openrouter的免费API模型
java·前端·javascript
赛博守夜人6 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every6 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
networknomad7 小时前
OpenReplay:自己搭的会话回放工具,给前端排错用的
前端·其他
缓慢更新7 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
陈随易8 小时前
AI 运维服务器,安全又可靠的方法
前端·后端·程序员
风骏时光牛马9 小时前
AI稳定性治理体系构建与疑难问题深度分析
前端