14

我正在尝试在节点 js 上使用画布。我正在使用 Windows Vista。基本方法npm install canvas失败后(见下面的错误),我查阅了一些教程,这是我尝试过的:

来源:
installation-node-canvas-for-windows
LearnBoost/node-canvas/wiki/Installation---Windows

登录控制台(npm install canvas在 cmd 中运行后):
日志包含几个警告,我不认为这些是问题 - 它主要类似于“从 double 转换为 float”,并且一个错误标记为红色:

init.cc
d:\pathToApp\node_modules\canvas\src\PNG.h(5): fatal error C1083: Cannot
open include file: 'cairo.h': No such file or directory [d:\pathToApp\n
ode_modules\canvas\build\canvas.vcxproj]

在日志的最后有:

gyp ERR! build error
gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe
` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\
npm\node_modules\node-gyp\lib\build.js:267:23)
gyp ERR! stack     at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:789:
12)
gyp ERR! System Windows_NT 6.0.6002
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modu
les\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd d:\pathToApp\node_modules\canvas
gyp ERR! node -v v0.10.16
gyp ERR! node-gyp -v v0.10.9
gyp ERR! not ok
npm ERR! weird error 1
npm ERR! not ok code 0

之后,node-module文件夹中什么都没有出现(没有canvas子目录,安装不成功后npm删除了子目录)。

所以我也尝试从github手动下载canvas模块,将其解压缩到node-modules中,然后node-gyp configure在node-modules/canvas中成功运行,node-gyp build不幸的是,这给了我同样的错误Cannot open include file: 'cairo.h'

我已经仔细阅读了我在这方面找到的所有内容。如果您可以提出任何帮助,请执行此操作。

4

5 回答 5

4

我已经设法让它在我的新 Windows 8 机器上运行,所以我想分享一些对其他人有帮助的细节。

我在用:

程序

确保您的路径中有Python 2GTK\bin

我已经从https://github.com/Automattic/node-canvas手动下载了文件并将其保存到node_modules/canvas

然后我node-gyp configure build在画布目录中运行。发生错误。我必须编辑binding.gyp ( https://github.com/Automattic/node-canvas/blob/master/binding.gyp ) 以匹配 GTK 文件夹中的实际文件。

例如:

  • 第 59 行:“(GTK_Root)/lib/libpng.lib”->“(GTK_Root)/lib/libpng.dll.a”
  • 第 34 行:“(GTK_Root)/bin/libpng14-14.dll”->“(GTK_Root)/bin/libpng15-15.dll”
  • ...

可能还有更多,您应该能够从错误日志中读取哪些文件出现问题,然后编辑名称以匹配 GTK 文件夹中的文件。

编辑 binding.gyp 后,命令node-gyp configure build成功完成。虽然我无法在 Canvas 中使用一些 jpg 文件(我没有正确测试它),但 png 文件可以正常工作。

如果 node-gyp 失败

您可能会遇到,每个 node-gyp 命令都会失败并显示类似于以下的消息(可能标记为红色):

“...bcrypt_lib.vcxproj(47,46):错误 MSB4025:无法加载文件项目。指定编码的无效字符。第 47 行,位置 46。”

这很可能是因为您的用户文件夹名称中有特殊字符。(事实上​​,Windows 8 会根据您的名字自动创建用户文件夹的名称,这是 Win 8 最糟糕的事情)。

2个快速解决方案:

希望这可以帮助。

于 2014-08-22T15:31:16.900 回答
1

经过漫长的艰苦过程,我设法让这个在 Windows 上工作。我有最后几个建议,你可以试试我的清单。

将所有 dll 文件从 c:\GTK 复制到 canvas\build\Release 文件夹。

将 IEShims.dll 从 c:\program files(x86)\Internet Explorer 复制到 canvas\build\Release 文件夹。

然后运行 ​​node-gyp 构建。

祝你好运。

于 2013-08-19T09:51:48.743 回答
1

我在尝试安装paperjs时遇到了画布问题。

这对我有用。

我的具体情况

GTK

确保您阅读了自述文件。这里有一些我第一次忽略的必要说明。例如:

跑:pkg-config --cflags gtk+-2.0

运行:gtk-demo并验证它是否有效

运行pkg-config让我知道我需要<GTK Directory>\lib\pkgconfigPKG_CONFIG_PATH环境变量中有。

帆布

我以此为指导: https ://github.com/LearnBoost/node-canvas/wiki/Installation---Windows

注意:我的机器上安装了 Visual Studio 2010、2012 和 2013,因此我不必处理 MSVC 依赖项。

npm install canvas总是失败 - 并自行清理(混蛋) - 所以我从 npm-cache: 中获取了缓存版本 %USERPROFILE%\AppData\Roaming\npm-cache\canvas\1.1.3\package。将此目录复制到您的项目node_modules目录并重命名为canvas. 在命令行输入新创建的canvas目录。

运行npm install nan

在你可以node-gyp configure成功运行之前,你需要验证你的 GTK 路径binding.gyp

第 5 行:

'GTK_Root%': 'C:/GTK', # 设置 GTK all-in-one bundle 的位置

现在你可以试试node-gyp configure。如果这成功了,太棒了!现在您可以构建它:node-gyp build.

那应该这样做。如果您尝试安装纸张,现在可以了。万岁!

如果这不起作用,或者您要添加一些内容,请不要害羞!请发表评论,以便我们都能受益。

于 2014-03-21T13:48:38.293 回答
0

您将需要捆绑在 GTK 中的 cairo 库

于 2013-10-23T08:44:01.897 回答
0

这是我找到的有关如何安装运行 node-gyp 所需的组件的最新信息,而 node-gyp 又是编译 canvas(和 jsdom)代码所必需的。我将在这里复制它以防链接失效。我已经在我的 Win7 x64 机器上测试了这些指令,并且它第一次工作。


在 Windows XP/Vista/7 上,node-gyp 需要 Python 2.7 和 Visual Studio 2010

根据Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for Windows SDK 7.1中的自述文件,为确保您的系统具有受支持的配置,请卸载以下产品,然后按所列顺序重新安装它们

  1. 视觉工作室 2010
  2. Windows SDK 7.1注意:如果您在安装时遇到错误,也许这个链接会对您有所帮助。
  3. 视觉工作室 2010 SP1
  4. 适用于 Windows SDK 7.1 的 Visual C++ 2010 SP1 编译器更新

在 x64 环境中,列表中的最后一个更新修复了有关缺少编译器和error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found.

于 2014-06-14T12:15:47.113 回答