TypeError:无法读取 Next.js 上未定义的属性(读取“调用”)

irw*_*nd2 18 javascript typescript reactjs next.js

我对 Next.js 和 Typescript 还很陌生。我想使用 next.js 和 typescript 以及 tailwind CSS 使用这个简单的创建应用程序命令构建一个项目: npx create-next-app -e with-tailwindcss my-project

一切都很顺利,直到我想使用 next/image 来使用 Image 标签并出现错误

Unhandled Runtime Error
TypeError: Cannot read properties of undefined (reading 'call')

Call Stack
options.factory
file:///C:/Users/irwan/Projects/messenger-clone/meta-messenger/.next/static/chunks/webpack.js (710:31)
__webpack_require__
/_next/static/chunks/webpack.js (37:33)
fn
file:///C:/Users/irwan/Projects/messenger-clone/meta-messenger/.next/static/chunks/webpack.js (365:21)
require
node_modules\next\dist\client\image.js (7:15)
./node_modules/next/dist/client/image.js
file:///C:/Users/irwan/Projects/messenger-clone/meta-messenger/.next/static/chunks/app/layout.js (39:1)
options.factory
/_next/static/chunks/webpack.js (710:31)
__webpack_require__
file:///C:/Users/irwan/Projects/messenger-clone/meta-messenger/.next/static/chunks/webpack.js (37:33)
fn
/_next/static/chunks/webpack.js (365:21)
__webpack_require__
node_modules\next\dist\client\app-index.js (26:16)
requireModule
node_modules\next\dist\compiled\react-server-dom-webpack\client.js (142:0)
initializeModuleChunk
node_modules\next\dist\compiled\react-server-dom-webpack\client.js (427:0)
resolveModuleChunk
node_modules\next\dist\compiled\react-server-dom-webpack\client.js (385:0)
eval
node_modules\next\dist\compiled\react-server-dom-webpack\client.js (668:0)
Run Code Online (Sandbox Code Playgroud)

我确信错误与 URL 无关,因为我已经在 next.config.js 文件中添加了要列入白名单的域。

这是我的包 JSON 文件:

{
  "private": true,
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start"
  },
  "dependencies": {
    "next": "^13.0.7",
    "react": "18.2.0",
    "react-dom": "18.2.0"
  },
  "devDependencies": {
    "@types/node": "18.11.3",
    "@types/react": "18.0.21",
    "@types/react-dom": "18.0.6",
    "autoprefixer": "^10.4.12",
    "postcss": "^8.4.18",
    "tailwindcss": "^3.2.1",
    "typescript": "^4.8.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

最后,我在 next.js 13 上使用 beta 功能(?)appDir。这是我的 next.config.js 文件:

reactStrictMode: true,
  images: {
    domains: ['i.ibb.co']
  },
  experimental: {
    appDir: true
  }
Run Code Online (Sandbox Code Playgroud)

我在 Header.tsx 组件上使用图像标签。这是我的 Header.tsx

import Image from "next/image";
import React from "react";

function Header() {
  const url = "https://i.ibb.co/LhMfkJw/logo-Meta.png";
  return (
    <header>
      <div>
        <div>
          <Image src={url} alt="Logo" width={50} height={10} />
        </div>
      </div>
    </header>
  );
}

export default Header;
Run Code Online (Sandbox Code Playgroud)

然后在我的layout.tsx组件上使用该标头:

import "../styles/globals.css";
import Header from "./Header";

export default function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  return (
    <html>
      <head />
      <body>
        <Header />
        {children}
      </body>
    </html>
  );
}
Run Code Online (Sandbox Code Playgroud)

谢谢回复

Muk*_*van 10

我也遇到了同样的问题,请将您的下一个版本更改为 13.0.6,然后等到我们都获得 13.0.8 或更高版本,这是版本 13.0.7 中的问题

  • 请删除您的 .next 文件夹和 node_modules 文件夹并运行 *npm i* 并重试@NeuTronas (2认同)

小智 6

对于使用next-transpile-modules\xe2\x80\x94 的用户,请使用transpilePackages选项。这将为您解决问题。

\n

npm 页面说这个包内置在 next 13.1\n https://www.npmjs.com/package/next-transpile-modules

\n


Mau*_*rez 5

删除所有服务人员。

开发工具 > 应用程序 > 存储 > 清除站点数据

在此输入图像描述


irw*_*nd2 1

我终于有时间继续这个项目了,正如 @Abdelrhman kamal 提到的,可以通过安装 next canary 来解决 next/image 的使用:

npm install next@canary
Run Code Online (Sandbox Code Playgroud)

可能它已经在发布的更新中修复了,因为我之前使用的是 13.0.7 的下一版本,而金丝雀版本是 13.1.1。

谢谢