Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save XYShaoKang/ae657eb81279528cca718c678be28215 to your computer and use it in GitHub Desktop.
Save XYShaoKang/ae657eb81279528cca718c678be28215 to your computer and use it in GitHub Desktop.
使用 gatsby cli 生成一个新的站点时,卡在安装`pngquant-bin`的临时解决办法

gatsbyjs/gatsby#20389

原因:

原因是gatsby生成的默认站点会依赖一个包pngquant-bin

gatsby-starter-default@0.1.0
└─┬ gatsby-plugin-sharp@2.6.1
  └─┬ imagemin-pngquant@6.0.1
    └── pngquant-bin@5.0.2

pngquant-bin会根据不同的平台,去raw.githubusercontent.com下载对应的二进制文件,当下载失败时,会从源码开始开始编译生成二进制文件,如果失败,则报错.

因为总所周知的原因,raw.githubusercontent.com在国内是被墙的.而当我们又不具备能编译pngquant-bin的环境时,导致安装失败.

通常我们能通过配置HTTP_PROXY,让终端程序通过代理来访问被墙的网络.

pngquant-bin处理下载依赖的包是bin-wrapper -> download -> got,最终是通过got来下载文件

got并不支持直接使用环境变量来设置代理,像我们常用的使用HTTP_PROXY的值来设置代理对got无效.

got只能在使用包时手动设置代理,或者使用global-agent的方式来处理,遗憾的是在安装pngquant-bin的过程中,我还没发现能用上这两种方法的地方,如果有人知道,可以告诉我.

解决办法:

经过 @Renchongyi提醒,可以通过设置HTTP_PROXY或者用npm config set proxy来设置代理,只是必须是http协议的代理.支持的配置方式

imagemin/pngquant-bin#110 中有一个修复方案,可以使 bin 的下载地址可配置,不过好像并不顺利

  1. (作为临时方案有效)如果使用的yarn的话,第一次安装失败之后,找到缓存中npm-pngquant-bin-5.0.2-6f34f3e89c9722a72bbc509062b40f1b17cda460-integrity/node_modules/pngquant-bin/lib/index.js,修改下载源url,将raw.githubusercontent.com/imagemin修改为npm.taobao.org/mirrors,然后重新安装即可.使用yarn cache dir 可以打印出yarn缓存的位置
  2. 使用全局代理或者 vpn,或者使用像Proxifier的软件专门代理node中的流量
  3. 如果内网有类似Nexus私服的话,直接克隆pngquant-bin,将下载源修改掉,发布到私服上即可.
  4. 可以配置编译环境,让pngquant-bin能够通过编译生成,不过这并非我所长,所以没法提供更多建议.
@AndyFong
Copy link

AndyFong commented Jun 4, 2020

You saved my life !!! ❤

@xkungfu
Copy link

xkungfu commented Dec 31, 2020

国内为什么没有人做一个专用代理服务器给大家安装github应用时提供方便?
政府,公司,个人,众筹都可以研究一下呀。

@happy-func
Copy link

国内为什么没有人做一个专用代理服务器给大家安装github应用时提供方便?
政府,公司,个人,众筹都可以研究一下呀。

还是拆长城吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment