pnpm i后提示Ignored build scripts: @parcel/watcher, esbuild, vue-demi...和命令冲突:npx only-allow npm解决方案

问题1:pnpm i后 提示 Ignored build scripts: @parcel/watcher, esbuild, vue-demi...

核心原因是 pnpm 的安全机制默认禁止了依赖包的自动构建脚本(如 installpostinstall 等),目的是防止恶意脚本执行。这些被忽略的脚本通常是依赖包在安装时需要执行的 “构建步骤”(比如编译二进制文件、处理兼容性代码等),如果不运行可能导致依赖功能异常(例如运行时找不到模块、报语法错误等)。

解决方案:允许可信依赖的构建脚本

步骤如下:

  1. 运行 pnpm 的脚本审批命令在终端中执行:

    pnpm approve-builds
    
  2. 选择需要允许的依赖执行命令后,终端会显示所有被忽略脚本的依赖列表(包括 @parcel/watcheresbuildvue-demi 等)。

    • 按 空格键 选中需要允许的依赖(建议全选这些常见的官方依赖,它们是安全的);
    • 选中后按 回车键 确认(一般来说不会有啥风险,可以直接全部允许)。
  3. 重新安装依赖(可选)批准后,为了确保脚本正确执行,建议重新安装一次依赖:

    pnpm install

或者使用:

1. 临时绕过方案(命令参数)

--unsafe-perm 和 allowed-dep-scripts=... 是 pnpm install 命令的参数,需要跟在安装命令后使用:

  • 完全绕过所有安全检查(不推荐,范围太广)

    pnpm install --unsafe-perm
    
  • 只允许指定依赖的脚本更安全,推荐)

    pnpm install --allowed-dep-scripts=@parcel/watcher,esbuild,vue-demi
    

    这条命令的意思是:执行 pnpm install 时,允许 @parcel/watcheresbuildvue-demi 这三个依赖运行它们的构建脚本。

2. 永久白名单配置(配置文件)

allowed-dep-scripts=@parcel/watcher,esbuild 是配置文件的内容,不是命令,需要手动创建配置文件:

  • 步骤 1:在项目根目录(和 package.json 同级)创建一个名为 .npmrc 的文件(注意文件名前有个点)。
  • 步骤 2:打开 .npmrc 文件,粘贴以下内容并保存:
    allowed-dep-scripts=@parcel/watcher,esbuild,vue-demi
    
  • 步骤 3:之后正常运行 pnpm install 即可,pnpm 会自动读取 .npmrc 中的配置,允许指定依赖的脚本运行,无需每次手动批准。

如何确认这些依赖是否安全?

1. 检查依赖的 “出身” 和知名度

这是最快速的判断方式,知名依赖通常经过大量用户验证,安全风险极低:

  • esbuild:由知名前端开发者 Evan Wallace 开发(曾参与 Chrome V8 团队),是前端圈广泛使用的超快打包工具,每周 npm 下载量过千万,属于 “明星级” 依赖。
  • vue-demi:由 Vue 官方团队核心成员 Anthony Fu 开发,用于解决 Vue 2 和 Vue 3 兼容性问题,是 Vue 生态的官方配套工具。
  • @parcel/watcher:属于 Parcel 打包工具 的核心依赖,Parcel 是主流前端构建工具之一,由正规团队维护。

这三个依赖均来自正规团队 / 知名开发者,属于前端生态中被广泛使用的 “基础设施级” 依赖,安全可信度极高。

2. 查看 npm 官方信息和安全报告

  • 步骤 1:访问 npm 包页面搜索包名(如 esbuild 的 npm 页面),查看:

    • 下载量:每周下载量越高(通常百万级以上),说明使用越广泛,被攻击或存在恶意代码的风险越低。

    • 发布者:是否为官方账号(如 vue-demi 的发布者是 antfu,已认证)。
    • 安全警告npm 页面右侧若有 “Security score” 或 “Vulnerabilities” 提示,会明确标注已知漏洞(这三个包目前均无高危漏洞)。
  • 步骤 2:用 npm audit 检查项目漏洞在项目根目录运行:

    npm audit  # 或 pnpm audit
    

    命令会扫描所有依赖的已知安全漏洞,若这三个包有问题,会明确列出风险等级和修复建议。

问题2:命令冲突:npx only-allow npm

项目中存在一个 preinstall 脚本(在安装依赖前自动执行),其中运行了 only-allow npm 命令。这个命令的作用是强制项目只能使用 npm 作为包管理器,禁止使用 pnpm 或 yarn

为什么会出现

你现在用的是 pnpm i,但项目配置强制要求用 npm,所以脚本会阻断 pnpm 的安装流程,并提示你需要安装 only-allow 工具来执行这个检查。

解决办法

  • 方法 1(推荐)改用 npm 安装依赖,符合项目的强制要求
    npm install
    
  • 方法 2(如果需要用 pnpm):修改项目的 preinstall 脚本,去掉 only-allow npm 限制:打开 package.json,找到 scripts 中的 preinstall 字段,删除或注释掉这一行:
    // 原配置(需要修改)
    "scripts": {
      "preinstall": "npx only-allow npm"
    }
    
    // 修改后(允许任意包管理器)
    "scripts": {
      // "preinstall": "npx only-allow npm"  // 注释或删除
    }
    
    然后再重新运行 pnpm i 即可。
  • 也可以当pnpm i 后提示:然后输入n,会出现npm ERR!,不用管,后面下一行直接pnpm run dev 就可以运行了;选择y你只能使用npm了。
### 构建过程中为何忽略某些构建脚本 在构建工具链中,当遇到类似于 `Ignored build scripts` 的错误提示时,通常是因为这些包中的构建脚本未被显式允许运行。这种行为可能由安全策略引起,例如通过工具如 `pnpm` 或其他依赖管理器实施的安全措施。 #### 安全原因 现代软件供应链攻击频繁发生,因此许多依赖管理工具引入了严格的权限控制机制来防止恶意代码执行。如果某个依赖项尝试运行其构建脚本而该操作未经批准,则会被阻止并标记为已忽略。这可以有效减少潜在风险[^1]。 #### 解决方案 要解决这个问题,可以通过命令行工具手动审批哪些依赖应该获准运行它们各自的构建脚本。对于使用 pnpm 的项目来说,按照错误消息指示运行以下命令即可: ```bash pnpm approve-builds ``` 这条指令会引导开发者选择希望放行的具体依赖列表,从而让相应包能够正常执行必要的初始化或编译过程而不被打断。 另外值得注意的是,在配置 Webpack 使用 esbuild 进行优化的时候也需要确保各个版本兼容良好以免引发不必要的冲突或者警告信息。比如给定的例子展示了如何利用 esbuild 插件来进行 CSS 文件最小化处理的同时保持 Vue 应用生态系统的完整性[^3]。 至于另一个提到关于 Vue 项目的打包失败情况,则可能是由于 package.json 中定义的脚本名称拼写有误所造成的简单人为失误所致;只需修正对应字段名使其匹配实际存在的任务函数便可恢复正常运作状态[^4]。 ### 如何提升构建效率? 除了上述讨论外还有一点值得关注——即 esbuild 自身具备极高的性能表现背后的原因之一在于它采用 Go 编程语言编写而成,并针对常见 JavaScript/TypeScript 转换需求做了高度针对性的设计与实现工作。这样做的好处是可以显著加快增量编译速度并且降低资源消耗水平相比传统解决方案而言更加高效实用[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

じòぴé南冸じょうげん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值