我正在尝试编写使用 HTML 画布的共享代码(在服务器和客户端上运行)。
在客户端上,这应该可以正常工作。在服务器上,Node 没有画布(或 DOM),所以我想使用 node-canvas 插件:https ://github.com/Automattic/node-canvas 。
但是,我无法找到一种不会让 webpack 尝试将 node-canvas 捆绑到我的客户端代码中的方法来访问它(这会使 webpack 崩溃)。有什么方法可以加载 node-canvas 以使我可以使用我将在浏览器中使用的相同代码来引用它并且不会使 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;
画布.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 仍然捆绑在 node-canvas 中。