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

Qwik.js框架代码优化器是否存在问题?报Cannot read properties of null错误

Qwik.js代码优化器报错:Cannot read properties of null (reading '0')

问题背景

遇到Qwik.js代码优化器抛出的内部服务器错误,无法调试该问题。相关代码及错误信息如下:

相关代码

const drawImageTask = useVisibleTask$(() => {
    const canvas = canvasSignal.value;
    if (canvas) {
      const ctx = canvas.getContext('2d');
      const img = new Image();
      img.src = mapProps.imageUrl;
      img.onload = async () => {
        const canvasSize = calculateCanvasSize(img); // < ------------------------- 触发错误

function calculateCanvasSize(image: HTMLImageElement) {
    const aspectRatio = image.width / image.height;
    const canvasWidth = window.innerWidth;
    const canvasHeight = canvasWidth / aspectRatio;
    return [canvasWidth, canvasHeight];
  }

错误信息

12:02:14 AM [vite] Internal server error: Cannot read properties of null (reading '0')
Plugin: vite-plugin-qwik
文件路径:G:/projects/websites/LoreCoords/Qwik Basic Template/src/components/map/map.tsx

调用栈

at createRollupError2 (G:\projects\websites\LoreCoords\Qwik Basic Template\node_modules@builder.io\qwik\optimizer.cjs:1624:38)
at G:\projects\websites\LoreCoords\Qwik Basic Template\node_modules@builder.io\qwik\optimizer.cjs:2166:49
at Array.forEach ()
at G:\projects\websites\LoreCoords\Qwik Basic Template\node_modules@builder.io\qwik\optimizer.cjs:2164:23
at Object.transform (G:\projects\websites\LoreCoords\Qwik Basic Template\node_modules@builder.io\qwik\optimizer.cjs:1314:9)
at TransformContext.transform (G:\projects\websites\LoreCoords\Qwik Basic Template\node_modules@builder.io\qwik\optimizer.cjs:2204:27)
at Object.transform (file:///G:/projects/websites/LoreCoords/Qwik%20Basic%20Template/node_modules/vite/dist/node/chunks/dep-79892de8.js:43387:44)
at async loadAndTransform (file:///G:/projects/websites/LoreCoords/Qwik%20Basic%20Template/node_modules/vite/dist/node/chunks/dep-79892de8.js:41105:29)

解决方案

  1. 修复代码语法问题:原代码中img.onload的箭头函数、useVisibleTask$的回调函数均未闭合,导致Qwik优化器解析代码时出错。修正后的代码如下:
const drawImageTask = useVisibleTask$(() => {
    const canvas = canvasSignal.value;
    if (canvas) {
      const ctx = canvas.getContext('2d');
      const img = new Image();
      img.src = mapProps.imageUrl;
      img.onload = async () => {
        const canvasSize = calculateCanvasSize(img);
        // 后续使用canvasSize的业务逻辑
      }; // 闭合onload箭头函数
    }
}); // 闭合useVisibleTask$回调函数

function calculateCanvasSize(image: HTMLImageElement) {
    const aspectRatio = image.width / image.height;
    const canvasWidth = window.innerWidth;
    const canvasHeight = canvasWidth / aspectRatio;
    return [canvasWidth, canvasHeight];
}
  1. 添加图像加载错误处理:避免运行时因图片加载失败导致的后续问题:
img.onerror = () => {
    console.error('图片加载失败', mapProps.imageUrl);
};
  1. 更新Qwik依赖:若语法修复后仍报错,尝试升级Qwik及相关插件到最新版本,可能是优化器的已知bug已被修复:
npm update @builder.io/qwik vite-plugin-qwik

内容的提问来源于stack exchange,提问作者Adam R. Turner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:39