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

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

相关推荐
IT_陈寒12 分钟前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
涵涵(互关)25 分钟前
GoView各项目文件中的相关语法2
前端·javascript·vue.js
子兮曰32 分钟前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
小村儿1 小时前
连载06 - Hooks 源码深度解析:Claude Code 的确定性自动化体系
前端·后端·ai编程
心中无石马1 小时前
uniapp引入tailwindcss4.x
前端·css·uni-app
焰火19991 小时前
[Vue]可重置的响应式状态reactive
前端·vue.js
陆枫Larry1 小时前
CSS transform scale:图片放大效果背后的原理
前端
老王以为2 小时前
为什么 React 和 Vue 不一样?
前端·vue.js·react.js
web打印社区2 小时前
2026最新Web静默打印解决方案,无插件无预览,完美替代Lodop
前端·javascript·vue.js·electron·pdf
这个DBA有点耶2 小时前
分组排名不用窗口函数?那你还在写几十行的子查询
前端·代码规范