使用 Browserify 从 p5.js 导出函数

Exporting a function from p5.js with Browserify

首先,我有一个p5.js脚本:

//canvas.js
var p5 = require('p5')

module.exports = new p5(function () {
  this.setup = function setup () {
    this.createCanvas(700, 400)
    this.background(205)
    this.loadImage('/uploads/uploaded_image', function (img) {
      image(img, 0, 0)
    })
    this.updatePixels()
  }
  this.clearCanvas = function redraw () {
    this.background('black')
  }

一切都在一个新的 p5 对象中,这样它就可以与 browserify 捆绑在一起,因为据我所知,p5 在全局命名空间中运行。这工作正常,但我需要一个按钮可以将整个 canvas 变成黑色,因此我添加了一个新函数 clearCanvas 以将 canvas 全部重绘为黑色。我添加了 module.exports 部分,以便我可以在 p5 对象中要求并在另一个脚本中使用这个新函数。然后我在我的玉文件中添加了一个按钮:

    button(type='button', id='clear').
            Click to clear

然后我创建了一个在 p5 导出对象中需要的处理程序并使用 clearCanvas 函数 onClick:

var canvas = require('./canvas.js')

document.getElementById('clear').onclick = function () {
  canvas.clearCanvas()
}

结果在控制台出现两个错误:

bundle.js:34633 未捕获类型错误:无法设置 属性 'onclick' 为 null

bundle.js:14197 p5 在创建全局函数 "clear" 时遇到问题,可能是因为您的代码已经将该名称用作变量。您可能希望将变量重命名为其他名称。

这里回答了这个问题:

p5.js 运行s 在全局对象中并导出不是内置到 p5 的函数,您必须在实例模式下 运行 p5。这也允许您 运行 p5 的多个实例。