You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js引入canvas-constructor报No "exports" main defined错误

报错原因

你遇到的ERR_PACKAGE_PATH_NOT_EXPORTED错误根源是当前安装的canvas-constructor为v6+版本,该版本从v6开始仅支持ESM模块规范,不再提供CommonJS规范的require()入口导出,因此直接用require('canvas-constructor')导入时会触发包导出规则校验失败。

解决方法

二选一即可,新手优先选第一种:

  • 方法1:降级到兼容CommonJS的版本
    执行以下命令卸载当前版本,安装最后一个支持CommonJS的稳定版:
    npm uninstall canvas-constructor
    npm install canvas-constructor@5.0.2
    
    安装完成后原有代码不需要任何修改,直接启动服务即可正常运行。
  • 方法2:将项目切换为ESM规范适配新版本
    1. 打开项目根目录下的package.json文件,添加"type": "module"配置项
    2. 将原有CommonJS的require写法全部替换为ESM的import写法,同时注意新版本canvas-constructor需要指定cairo适配路径,修改后的完整代码如下:
    import express from 'express'
    import { Canvas } from 'canvas-constructor/cairo'
    import canvas from 'canvas'
    const app = express()
    
    app.get('/:feed', async (req, res) => {
        const img = await canvas.loadImage('https://i.pinimg.com/originals/30/82/b0/3082b0354572c4d37af6994b4e8baa43.png')
        const image = new Canvas(670, 435)
          .printImage(img, 0, 0, 670, 435)
          .setTextFont('28px Impact')
          .printText(req.params.feed, 40, 150)
          .toBuffer();
    
        res.set({'Content-Type': 'image/png'})
        res.send(image)
    })
    
    app.listen(8080)
    

注意:首次接触JavaScript开发优先选择第一种方法,不需要调整模块配置和代码语法,出错概率更低。

内容的提问来源于stack exchange,提问作者Ocryol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:45:31