0

スクリプトでノード ライブラリを読み込んでおり、そのライブラリに依存するいくつかのカスタマイズを読み込んだ直後に:

var somelib = require('somelib');

// some customizations made to
// somelib's methods
require('./somelib.custom');

somelib.SomeObject = ...
^
ReferenceError: somelib is not defined

ロードが非同期で行われrequire、最初の名前空間が正しく名前空間化される前に 2 番目のエラーが発生するため、例外が発生し続けます。これを解決する良い方法は何ですか? ありがとう。

編集:私の元のコード

fabric.jsノードパッケージ(パッケージサイトの記事に基づいて構築)を使用して、jsonデータからPNG画像を作成しようとしています。これは、最初にクライアントで生成された JSON データをサーバー側のファブリック キャンバスにロードし、ファイル ストリームに書き込むことによって行われます。

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

var canvas   = fabric.createCanvasForNode(400, 400);
var outfile  = fs.createWriteStream("image.png");
var filepath = "/path/to/file.json";

fs.readFile(filepath, 'utf8', function(err, json) {
  canvas.loadFromJSON(json, function() {
    var stream = canvas.createPNGStream();
    stream.on('data', function(chunk) {
      outfile.write(chunk);
    });
  });
});

「fabric.custom」ファイルには、いくつかのファブリック プロトタイプのデフォルトを上書きするいくつかのカスタム ファブリック キャンバス オブジェクトが含まれています。それらはクライアント上で適切に機能し、キャンバスを適切にレンダリングするために必要です。次のようになります。

fabric.TextBox = fabric.util.createClass(fabric.Text, {

  type: 'text-box',
  // more object specific stuff ...
});

ありがとう。

4

1 に答える 1

5

の副作用に頼ってrequireオブジェクトfabricを変更するのではなく、fabric.custom.jsファイルに変更された をエクスポートさせるのはどうfabricですか?

fabric.custom.js:

var fabric = require('fabric').fabric;
fabric.myCustomMethod = function(){ ... }
...
module.exports = fabric; // the modified fabric

そしてあなたのメインファイルで:

var path     = require('path');
var fs       = require('fs');
// var fabric   = require('fabric').fabric; No need for this line anymore
var modifiedFabric = require('./fabric.custom');

...
modifiedFabric.myCustomMethod( ... ); // should now be available
于 2014-04-14T13:54:23.803 に答える