0

fabric.js在我的应用程序中使用了几个自定义类来呈现和封装一些额外的数据属性,如此处所建议的

现在我有了这些生成的 JSON 数据,我想渲染画布并将其写入服务器上的 PNG 图像,使用node.js和 fabric 的npm包。这适用于内置的结构类,例如fabric.Rector fabric.Text,但我的自定义不断抛出奇怪的 require 错误。

基本上,自定义文件如下所示:

织物.custom.js

// without this node raises "fabric is not defined" error
var fabric = fabric || {};

if (typeof exports !== 'undefined') {
  exports.fabric = fabric;
}

// actual implementations
fabric.NamedImage = fabric.util.createClass(fabric.Image, {

  type: 'named-image',

  // custom overrides
  // ...
});

并像这样加载到我的节点脚本中:

var fabric = require('fabric').fabric;
require('./fabric.custom');

// read JSON and write to PNG ..

当我运行它时,会发生以下异常:

/Users/sa125/code/nodetest/fabric.custom.js:13
fabric.NamedImage = fabric.util.createClass(fabric.Image, {
                               ^
TypeError: Cannot call method 'createClass' of undefined
    at Object.<anonymous> (/Users/sa125/code/nodetest/fabric.custom.js:13:32)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Object.<anonymous> (/Users/sa125/code/nodetest/test.js:4:16)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)

我需要做些什么才能将我的客户端 fabric.js 代码与 node.js 一起使用?

4

1 回答 1

1

这仅仅是因为 node.js 没有全局范围。在浏览器中发生的是原始结构变量在全局命名空间下的 DOM 中分配。这意味着在您的自定义模块中,结构变量已经存在。

在 node.js 中,该变量不存在,因为每个文件都有自己的本地范围。当 node.jsfabric在自定义文件中查找变量时,由于尚未创建,因此无法找到它。您需要做的是fabric使用您的附加方法扩展第一个 require 之后的原始对象,或者在 require 上创建一个新变量并将两个对象合并在一起。无论哪种方式,require('...');如果没有分配给变量,在 node.js 中都是无用的。

于 2013-02-11T10:32:42.083 回答