TypeError: Cannot read properties of undefined (reading 'call') on Next.js
我对Next.js和Typescript很陌生。我想用Next.js和Typescript以及tailwind CSS建立一个项目,使用这个简单的创建应用命令:npx create-next-app -e with-tailwindcss my-project
一切都很顺利,直到我想用next/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)
我确信这个错误不是关于URL的,因为我已经在next.config.js文件中添加了要被白名单的域名。
这里是我的package 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"
}
}
最后,我在 next.js 13 上使用 beta 功能(?)appDir。这是我的 next.config.js 文件:
reactStrictMode: true,
images: {
domains: ['i.ibb.co']
},
experimental: {
appDir: true
}
我在我的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;
然后在我的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>
);
}
谢谢你的答复
Image
组件?
- ivanatias 2022-12-17
我也有同样的问题,请把你的下一个版本改为13.0.6,并等到我们都得到13.0.8或更大的版本,这是一个13.0.7版本的问题。
对于那些使用next-transpile-modules
的人--使用transpilePackages
选项代替。这将为你解决这个问题。
npm页面上说,这个包是内置在下一个13.1中的https://www.npmjs.com/package/next-transpile-modules。
转到page.tsx或page.js,删除所有Image组件,一切都会正常工作 编辑#1 使用这个命令,它将解决这个问题: npm install next@canary next@canary是一个next.js包,在转到next.js版本之前修复了一些问题和麻烦。
我不确定到底是什么原因造成的,但做了一个npm install next@canary
,就解决了我的这个问题。
我终于有时间继续这个项目了,正如@Abdelrhman kamal所提到的,Next/image的使用可以通过安装Next canary来解决。
npm install next@canary
可能在发布的更新中已经修复了,因为我之前使用的是13.0.7的下一个版本,而canary的版本是13.1.1。
谢谢你