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

切换至pnpm后SvelteKit构建失败:Rollup解析canvas.node报错

SvelteKit + pnpm构建时pdf.js触发node-canvas二进制解析错误的解决需求

TL;DR:构建SvelteKit项目时,Rollup尝试解析本不应纳入构建产物的canvas.node二进制文件,触发来自node-canvas和pdf.js的解析错误。希望找到将pdf.js标记为仅浏览器端解析的方法,或其他让pdf.js与pnpm兼容的方案;node-canvas官方方案不适用,因为项目需要同时生成Node.js和浏览器端产物。


将SvelteKit项目的包管理器从npm切换为pnpm后,开发模式运行正常,但执行构建时失败,原始错误日志如下:

node_modules/.pnpm/pdfjs-dist@3.9.179/node_modules/pdfjs-dist/build/pdf.js (1950:23)
Use of eval in "node_modules/.pnpm/pdfjs-dist@3.9.179/node_modules/pdfjs-dist/build/pdf.js" is strongly discouraged as it poses security risks and may cause issues with minification.

# ... 成功的构建输出省略
.svelte-kit/output/server/index.js                                                                                                    104.13 kB
.svelte-kit/output/server/entries/pages/room/_room_/_page@room.svelte.js                                                              125.46 kB
.svelte-kit/output/server/chunks/media-handlers.js                                                                                    145.42 kB

Run npm run preview to preview your production build locally.

> Using @sveltejs/adapter-node
error during build:
RollupError: Unexpected character '' (Note that you need plugins to import files that are not JavaScript)
    at error (file:///home/oscarhermoso/Git/org-repo/node_modules/.pnpm/rollup@3.28.0/node_modules/rollup/dist/es/shared/node-entry.js:2245:30)
    at Module.error (file:///home/oscarhermoso/Git/org-repo/node_modules/.pnpm/rollup@3.28.0/node_modules/rollup/dist/es/shared/node-entry.js:13674:16)
    at Module.tryParse (file:///home/oscarhermoso/Git/org-repo/node_modules/.pnpm/rollup@3.28.0/node_modules/rollup/dist/es/shared/node-entry.js:14405:25)
    at Module.setSource (file:///home/oscarhermoso/Git/org-repo/node_modules/.pnpm/rollup@3.28.0/node_modules/rollup/dist/es/shared/node-entry.js:14006:39)
    at ModuleLoader.addModuleSource (file:///home/oscarhermoso/Git/org-repo/node_modules/.pnpm/rollup@3.28.0/node_modules/rollup/dist/es/shared/node-entry.js:24526:20)
ELIFECYCLE Command failed with exit code 1.

通过修改node_modules添加console.trace后,获取到完整错误信息,发现问题源于Rollup尝试解析二进制文件canvas.node,依赖调用链如下:

Trace: {
  cause: SyntaxError: Unexpected character '' (1:0) # <-- 包含不可见字符U+007f
  # ... 其他信息省略
  code: 'PARSE_ERROR',
  id: '/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/build/Release/canvas.node',
  message: "Unexpected character '\x7F' (Note that you need plugins to import files that are not JavaScript)",
  frame: '1: \x7FELF\x02\x01\x01\x00\x00\x00\x00\x00\x'
   # ... 其他信息省略
}
# ...

# 完整调用链:
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/build/Release/canvas.node
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/lib/bindings.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/index.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/lib/image.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/lib/canvas.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/lib/context2d.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/canvas@2.11.2/node_modules/canvas/lib/pattern.js
/home/oscarhermoso/Git/org-repo/node_modules/.pnpm/pdfjs-dist@3.9.179/node_modules/pdfjs-dist/build/pdf.js

我的理解是Rollup在构建时错误地解析了canvas.node二进制文件,但实际上该文件完全不需要被打包——因为pdf.js仅用于浏览器端。目前不清楚为何切换包管理器到pnpm会触发这个问题,除了切回npm外没有其他思路,恳请提供解决方案建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:47:19