前言
当我第一次接触 node.js 时,差点被 node-sass 的安装问题搞的从入门到放弃。近日因为在做 electron 桌面端的开发,涉及 node-canvas ,又被 node-gyp 搞了次。特别记录下,希望能帮助遇到有类似问题的同学。
node-gyp
在开始环境配置前,先来谈下什么是 node-gyp ?
首先 node.js 是跨平台的应用,虽然表面上我们通过 require('fs') 调用了 js 原生 native 模块,其实它内部是由 builtin modules 提供相关支持,通常都是由 C++ 来编写的。
那如果我们用的一些第三方依赖,涉及 C++ 扩展怎么处理?这时候就需要一个中间人来帮我们编译这些代码,node-gyp 就是干这事的。
这就是为什么你安装 node-sass、node-canvas 有时会出错的原因,因为相关环境还有问题。
下面来看下,怎么通过几步来搞定 node-gyp 的平台环境。
windows-build-tools
像前面说的,为了能运行 C++ 代码,node-gyp 需要些三方环境的支持(Visual C++,python …),当然市面上有集成好的工具,让我们快速的准备好这些环境。
这个就是 windows-build-tools ,一个用于 windows 平台的环境构建工具。
只要我们把它安装在全局即可,稍作等待,后续它为我们安装好一系列的插件:
安装过程
基本如果你只是使用 node-sass ,那么依靠这一步基本完事。当然如果你像我,还用到了 node-canvas ,那么还需要如下两步的配置。
GTK2
node-canvas 只是基于 cairo 的实现,为了让编译成功,还需要 cairo 的运行时代码,而这些是由 GTK 提供。
所以就需要下载 GTK 的相关依赖:
windows-64:
http://ftp.gnome.org/pub/GNOME/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip
windows-32:
http://ftp.gnome.org/pub/GNOME/binaries/win32/gtk+/2.24/gtk+-bundle_2.24.10-20120208_win32.zip
基本一键安装,为了避免不必要的麻烦,请都采取默认配置。
libjpeg-turbo
为了能支持 JPEG 格式的文件,还需要 libjpeg-turbo 插件,同样安装也很简单。
下载地址:
https://sourceforge.net/projects/libjpeg-turbo/files/2.0.0/libjpeg-turbo-2.0.0-vc.exe/download
重新编译安装
再次强调,GTK2 和 libjpeg-turbo 不是必须的,因为我是要用 canvas 模块,所以讲这两者和 windows-build-tools 一同讲了。
如果上述两个插件安装没问题,你将在系统目录看到如下文件:
最后,再次安装你的原生模块,一切就都正常了:
npm install canvas
下图是,electron 的 electron-rebuild 再重新编译 canvas 模块: