十分钟分享:处理pnpm imagemin等依赖的二进制安装问题

前几天写了个项目中的图片压缩替换工具用了下imagemin发现有些依赖问题处理了下,简单分享下处理方式

imagemin应该很多人都知道,它是一个基于C++的图片压缩模块。其可支持多种图片格式,在node图片处理领域可谓是常青树。

但是在国内它有很有一个非常严重的问题,一些核心依赖的二进制文件老是下载不下来。今天我主要来分享一下这种情况怎么处理

方法一:cnpm

如果你的项目不关心包管理工具的话,直接使用cnpm安装imagemin的核心插件即可

方法二:依赖修改

cnpm对于项目来说基本快要被淘汰掉了,我也不希望变换自己的管理工具,我喜欢pnpm不想去变动

那么我们就需要去研究一下,为什么cnpm能安装下来,为什么pnpm就安装不下来

首先说cnpm为什么能安装下来?

大部分含有二进制的依赖基本都是因为二进制文件的下载问题导致安装失败(eg:node-sass等)。cnpm对于有些二进制文件会改变其下载地址使其走向国内源,可保证其正常安装

再具体看一下pnpm为啥下载不下来?

拿png的处理依赖来说,一般都会卡在pngquant-bin依赖的postinstallhook中,这个hook脚本主要是使用bin-wrapper来下载二进制文件

bin-wrapper 是一个用于简化二进制文件的安装和使用的工具。

我们要修改的就是这里的二进制文件指向,把这个指向转到taobao的镜像。你可以自己fork这个pngquant-bin去改动,不过需要修改的依赖包相当多不建议这样做。

幸好有个老哥另辟新径,直接改造了下bin-wrapper。在这里进行了链接的镜像指向 【github.com/best-shot/b...

那接下来我们要做的就是项目依赖安装的时候修正依赖树。因为我使用的pnpm,pnpm本身有一些hook函数。我们就直接可以在这里处理

创建.pnpmfile.cjs文件,将bin-wrapper转换为bin-wrapper-china

javascript 复制代码
module.exports = {
    hooks: {
        readPackage(packageJson) {

            if (packageJson.dependencies && packageJson.dependencies['bin-wrapper']) {
                console.log('当前依赖名称:',packageJson.name, '需要转化');
                packageJson.dependencies['bin-wrapper'] = 'npm:bin-wrapper-china';
            }
            return packageJson;
        },

    }
};

或者你也可以使用pnpm的overrides

json 复制代码
{
  "pnpm": {
    "overrides": {
      "*bin-wrapper": "npm:bin-wrapper-china"
    }
  },
}

yarn的话则是resolutions

json 复制代码
{
  "resolutions": {
    "**/bin-wrapper": "npm:bin-wrapper-china"
  }
}
相关推荐
天渺工作室14 小时前
实现一个adblock/adblock plus等浏览器广告拦截器检测插件
前端·javascript
阳光是sunny15 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
ZhengEnCi15 小时前
Q04-Vite禁用CSS代码分割-解决生产环境样式加载顺序混乱问题
前端·vue.js·vite
九酒15 小时前
AI Agent 开发踩坑记:口播功能非得用 APP 原生实现吗?
前端·人工智能·agent
Jackson__16 小时前
做了一段时间的AI coding后,我终于搞清了 CLI 和 MCP 的区别
前端·agent·ai编程
IT_陈寒19 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
用户479492835691519 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
薛定喵的谔21 小时前
我开源了一个精致的 Next.js 博客模板:Skyplume
前端·前端框架·next.js
张龙68721 小时前
构建生产级 AI Agent:工具调用与记忆架构实战指南
前端
kyriewen1 天前
2026 年了,还在用 Node.js?Bun 迁移实战:20 分钟搞定,附踩坑记录
前端·javascript·node.js