正确安装后,fabric JS 未在节点上运行

Posted

技术标签:

【中文标题】正确安装后,fabric JS 未在节点上运行【英文标题】:fabric JS not running on node after installing correctly 【发布时间】:2018-07-27 22:43:09 【问题描述】:

我想在节点服务器上使用 fabric js 来生成 SVG 图像。我按照说明在 mac 环境中的节点上运行 fabric js。我正在尝试从 nodejs 示例下的结构 js 文档中运行 hello world 结构应用程序。

如果我在节点 shell 中运行 typeof require('canvas');。根据fabricjs documentation,它应该返回“功能” 运行typeof require('fabric'); 也应该返回object。我很确定我正确安装了依赖项,但不完全确定为什么代码没有按预期运行。

但是,运行代码会导致此错误:TypeError: fabric.createCanvasForNode is not a function

这是我要运行的代码。

我将我的 python 版本更改为 2.7 并且节点是 v 9.2.0 。感谢所有帮助!

var fs = require('fs'),
    fabric = require('fabric').fabric,
    out = fs.createWriteStream(__dirname + '/helloworld.png');

var canvas = fabric.createCanvasForNode(200, 200);

var text = new fabric.Text('Hello world', 
  left: 100,
  top: 100,
  fill: '#f55',
  angle: 15
);
canvas.add(text);

var stream = canvas.createPNGStream();
stream.on('data', function(chunk) 
  out.write(chunk);
);

【问题讨论】:

【参考方案1】:

Dez 的回答几乎让我满意,但这不是一个完全有效的例子。至少对我来说不是。这是我在深入研究该主题后得到的结果:

const  fabric  = require("fabric");
const canvas = new fabric.Canvas(null, width: 500, height: 500);

const fs = require("fs");
const stream = canvas.createPNGStream();
const out = fs.createWriteStream("test.png");

var text = new fabric.Text("Hello world", 
  left: 100,
  top: 100,
  fill: "#f55",
  angle: 15
);

canvas.add(text);

canvas.renderAll();

stream.on('data', function(chunk) 
  out.write(chunk);
);

【讨论】:

获取“无法在 klass._setImageSmoothing 处读取属性 'imageSmoothingEnabled' 的 null ”... 您使用的是哪个版本的节点画布?确保使用 1.6.x,而不是 2。 我认为是 2。但最近的 fabric.js 需要 node-canvas 2,不是吗? 不,遗憾的是它仍然需要您使用 node-canvas 1.6.x。您可以通过检查 package.json 文件来检查版本。【参考方案2】:

看到您遇到的问题,我知道您使用的是 2.0.0 以上的版本,并且自从上述版本以来,他们似乎已经弃用了 createCanvasForNode 方法。 您可以通过评估 fabric 导入轻松确认这一点,并看到该方法不再可用。

从现在开始,您可以使用fabric.Canvasfabric.StaticCanvas

var fs = require('fs'),
    fabric = require('fabric').fabric,
    out = fs.createWriteStream(__dirname + '/helloworld.png');

var canvas = new fabric.Canvas(200, 200);
// or either var canvas = new fabric.StaticCanvas(200, 200);

var text = new fabric.Text('Hello world', 
  left: 100,
  top: 100,
  fill: '#f55',
  angle: 15
);
canvas.add(text);

var stream = canvas.createPNGStream();
stream.on('data', function(chunk) 
  out.write(chunk);
);

参考1:https://github.com/kangax/fabric.js/issues/3885

参考2:https://github.com/kangax/fabric.js/issues/4586

【讨论】:

嘿!感谢您的答复。应用您的更改让我进入了函数调用,但在 fabric.js:6840 this.contextContainer = this.lowerCanvasEl.getContext('2d'); TypeError: this.lowerCanvasEl.getContext is not a function 失败了知道为什么会发生这种情况吗? 也许你应该看看如何使用新的库版本,如果仍然有问题,请打开一个新问题。如果库发生了巨大变化,您将无法遵循相同的路径。

以上是关于正确安装后,fabric JS 未在节点上运行的主要内容,如果未能解决你的问题,请参考以下文章

React Native 未在 localhost 上运行

NServiceBus 终结点未在 Azure Service Fabric 本地群集上启动

应用程序未在未安装 VS 2008 的 PC 上运行

节点 cron 未在 EC2 上运行

Fabric源码分析之Peer链码安装

安装HBase后,HMaster进程无法在hadoop多节点集群上运行。