HTMLキャンバスを使用する共有コード(サーバーとクライアントの両方で実行される)を作成しようとしています。サーバーとクライアントの両方で共有コードにキャンバスインターフェイスを表示する
クライアントでは、これは完全に正常に動作するはずです。サーバーでは、Nodeにキャンバス(またはDOM)がないため、ノードキャンバスのプラグインを使用したいと考えています。https://github.com/Automattic/node-canvas。
しかし、私はwebpackにノードキャンバスをクライアントサイドのコード(webpackをクラッシュさせる)にバンドルしようとしないアクセス方法を試すことができません。ノードキャンバスをロードする方法はありますか?ブラウザで使用するのと同じコードで参照でき、Webpackのクラッシュをひどくしないでください。動作しませんでした
私の現在の努力、:
canvas.server.js
import Canvas from 'canvas';
const createCanvas = (width, height) => new Canvas(width, height);
export default createCanvas;
canvas.client.js
const createCanvas = (width, height) => {
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
return canvas;
};
export default createCanvas;
canvas.js
let createCanvas;
if (typeof document === 'undefined') {
// SERVER/node
createCanvas = require('./canvas.server.js');
} else {
// BROWSER
createCanvas = require('./canvas.client.js');
}
export default createCanvas;
使用中の
:
import createCanvas from './canvas';
const canvasElement = createCanvas(width, height);
const ctx = canvasElement.getContext('2d');
は残念ながら、WebPACKのは、まだノードキャンバスにバンドルされています。
サーバーとクライアントの両方で、キャンバスはその内容をデータURLにダンプします。データURLは、ページ上でとしてSVG内にレンダリングされます。これはすべて非常にハッキーで奇妙なことですが、とにかく動作しないでしょうが、試してみたいと思います。これは私が立ち往生しているステップです。 –
futuraprime
レンダリングされた同じキャンバスの2つの同一のコピーが必要な理由を理解できません。抽象化されたキャンバスのコピーをサーバーに保存しておき、イメージが必要になると(他のクライアント)、抽象的なイメージを送信して各クライアントにイメージをレンダリングさせます。すべてのnode.js canvas APIはソフトウェアレンダリングとSLOWです。サーバーが非常に迅速にシャッフルして、クライアントがGPU経由で簡単に処理できるようになります。 – Blindman67
私はサーバープロセスがありません。キャンバスは、アプリケーション全体がフラットファイルに縮小されたビルド時に一度だけレンダリングされ、ユーザーが最初のビューから離れたときにクライアント上に再作成されます。 – futuraprime