在node.js中使用自定义fabric.js类

时间:2013-02-11 10:23:57

标签: node.js fabricjs serverside-javascript

我在我的应用中使用了几个自定义fabric.js类来呈现和封装一些其他数据属性as suggested here

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

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

fabric.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)

我需要做些什么特别的事情来重新使用带有node.js的客户端fabric.js代码吗?

1 个答案:

答案 0 :(得分:1)

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

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