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规范适配新版本
- 打开项目根目录下的
package.json文件,添加"type": "module"配置项 - 将原有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
相关产品推荐
相关产品推荐

