node-canvas Windows安裝全網(wǎng)最強(qiáng)排坑指南

依賴

構(gòu)建node-canvas模塊需要:

  1. node-gyp的全局安裝。
  2. GTK 2
  3. 對于可選的JPEG支持(node-canvas 2.0和更高版本):libjpeg-turbo

安裝依賴的兩種方法

一、安裝chocolatey

所有的依賴可以與Windows的包管理器Chocolatey一起安裝。

  1. choco install -y python2 gtk-runtime microsoft-build-tools libjpeg-turbo (可能需要sudo / Administrator)。
  2. 您將需要捆綁在GTK中的cairo庫。下載適用于Win32Win64的GTK 2軟件包。在解壓縮的內(nèi)容C:\GTK。
  3. npm install canvas或者yarn add node-canvas

二、手動(dòng)安裝

1.安裝node-gyp

按照這里的說明:https//github.com/nodejs/node-gyp#on-windows

2.安裝GTK 2

您將需要捆綁在GTK中的cairo庫。下載適用于Win32Win64的GTK 2軟件包。在解壓縮的內(nèi)容C:\GTK。

注意:

  • GTK和Node.js都需要64位或32位編譯成功。
  • 下載GTK 2,而不是GTK 3,它缺少所需的libpng。如果你得到鏈接器錯(cuò)誤,你很可能選擇了錯(cuò)誤的包。
  • 如果您使用的位置不是C:\GTK,請將GTK_Root參數(shù)添加到npm installnode-gyp rebuild。例如:node-gyp rebuild --GTK_Root=C:\somewhere\GTK。

3.安裝libjpeg-turbo(可選,支持JPEG; node-canvas 2.0及更高版本)

下載適用于Visual C ++的最新libjpeg-turbo SDK(當(dāng)前libjpeg-turbo-1.5.1-vc.exelibjpeg-turbo-1.5.1-vc64.exe),并安裝到其默認(rèn)位置(C:\libjpeg-turbo如果是32位或C:\libjpeg-turbo6464位)。

注意:

  • libjpeg-turbo和Node.js都需要64位或32位編譯成功。
  • 如果您使用其他位置,請將jpeg_root參數(shù)添加到npm installnode-gyp rebuild。例如:node-gyp rebuild --jpeg_root=C:\somewhere\libjpeg-turbo。

4.安裝node-canvas

所有的依賴后設(shè)置,npm install canvasyarn add canvas


可能遇到的錯(cuò)誤

我剛開始是手動(dòng)安裝,然后各種報(bào)錯(cuò),差點(diǎn)懷疑人生,索性改成用chocolatey,依然報(bào)錯(cuò)。跑不通

error

1. EPERM: operation not permitted.

Error : EPERM: operation not permitted.
在不知道哪個(gè)Issues里面找到的 , 就是 degrade npm 來解決的 ,我的原Npm是5.4版本,然后通過 npm i -g npm@5.3 解決了.
如果 5.3不行就繼續(xù)降
有人降到5.0.3就可以了,也有人降到4.x的版本...
看你用的module兼容性吧...

2. qos.h 文件缺失

找到一篇說是要安裝windows kits 8.1 的庫 ,(我的系統(tǒng)是windows10 1703)

### 
**[Akudrevatykh](https://github.com/Akudrevatykh) 
**commented [datetime="2015-02-27T00:45:28Z" title="2015年2月27日 GMT+8 上午8:45" >on 27 Feb 2015</relative-time>]
(https://github.com/erikdubbelboer/node-sleep/issues/18#issuecomment-76309396)

Since this is one of the top links on Google for "Cannot open include file: 'qos.h'"
In a fresh Windows 8.1 environment you need to install Windows Software Development Kit (SDK) for Windows 8.1
(https://msdn.microsoft.com/en-us/library/windows/desktop/bg162891.aspx)

然后又是下載安裝
specify location 選擇默認(rèn)的

然后勾上了這兩個(gè),第四個(gè)不知道有沒有用,可選


image.png

裝完之后終于搞定:


image.png

3. Fix ‘node-gyp rebuild’ error on windows

這個(gè)我沒有碰到,如果你碰到了可以嘗試一下:
https://www.robertkehoe.com/2015/03/fix-node-gyp-rebuild-error-on-windows/

4. 缺少VCBuilder

重新在服務(wù)器安裝了一次,再次跪了好久
又碰到了一個(gè)錯(cuò)誤:缺少VCBuilder
讓我安裝 Windows SDK for Windows 2008 和 .Net Framework 3.5 , 或者安裝Visual studio 2008.
。我選擇了前者,誰沒事在服務(wù)器上裝vs那么大,下載了之后安裝。發(fā)現(xiàn).net3.5早已經(jīng)存在。
此時(shí)再進(jìn)行安裝
cnpm i -g canvas@next
繼續(xù)同樣的報(bào)錯(cuò)

不少人在這里碰到同樣的問題: https://github.com/nodejs/node-gyp/issues/307

實(shí)際有用的已經(jīng)幫你們挑出來了

npm install --global --production windows-build-tools

然而我安裝的時(shí)候居然無端端重啟了服務(wù)器??

5. node.lib :fatal error LNK1106: invalid file or disk full:cannot seek to 0x1F84E8

在服務(wù)器上部署新項(xiàng)目的時(shí)候,需要升級node.js以支持async/await,但噩夢又出現(xiàn)了
升級完之后 , 裝不了canvas . 報(bào)錯(cuò):


image.png

然后我以為錯(cuò)誤是 msbuild.exe的問題 ,一直跟vsbuildingtool死磕 , 半天過去了
從 .Net 2.0 / .Net3.5 /.Net.4.5 /.Net.4.6 和 Vs 2017 都裝了又裝,特別是裝vs2017的時(shí)候還老說失敗,缺少 ChocolateyInstall.ps1 , 沒辦法,找到本機(jī)的頂上 .

可依然沒有用:

image.png

然后柳暗花明又一村 , 把安裝步驟讀了幾十次 , 眼神最后落在了 yarn add canvas上邊 ,抱著最后死馬當(dāng)活馬醫(yī)的念頭 ,安裝 yarn , 最后神奇地解決了:

image.png

接下來測試一下

要注意的是,成功裝完東西后,你得重新開一個(gè) cmd / powershell , 不然你會(huì)一直報(bào)之前的錯(cuò).
這個(gè)我卡了多久已經(jīng)不記得了

cnpm i -g canvas@next

(文檔有2.0Alpha 和 1.x 的版本 , 注意一下)

app.js

var Canvas = require('canvas'),
    Image = Canvas.Image,
    canvas = new Canvas(200, 200),
    ctx = canvas.getContext('2d');

// Write "Awesome!"
ctx.font = '30px Impact'
ctx.rotate(0.1)
ctx.fillText('Awesome!', 50, 100)

var te = ctx.measureText('Awesome!');
ctx.strokeStyle = 'rgba(0,0,0,0.5)';
ctx.beginPath();
ctx.lineTo(50, 102);
ctx.lineTo(50 + te.width, 102);
ctx.stroke();

console.log('<img src="' + canvas.toDataURL() + '" />');

運(yùn)行 node app

image.png

over

成功

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容