部署时变量和对象出现未定义错误

Variables and Objects are getting undefined Error at the time of Deployment

我一直在做一个项目,在 Vercel 上部署时卡住了,我想问题是因为预渲染。 因为它导致我的 variables/objects 未定义,我稍后会从用户那里得到。 下面是构建日志文件的屏幕截图。

请告诉我问题是什么。

如果问题出在预渲染上,那么有什么方法可以停止预渲染某些 Next.js 组件吗? 这是我得到的错误。如果有人能提供帮助,我将不胜感激 me:blush:

出现错误的组件

function Message({ message: { text, user }, name }) {
    let isSentByCurrentUser = false;
    console.log(text, name, user);

    const trimmedName = name.trim().toLowerCase();

    if (user === trimmedName) {
        isSentByCurrentUser = true;
    }

    return (
        isSentByCurrentUser
            ? (
                <div className={[styles.messageContainer, styles.justifyEnd].join(" ")} >
                    <p className={[styles.sentText, styles.pr10].join(" ")} >{trimmedName}</p>
                    <div className={[styles.messageBox, styles.backgroundBlue].join(" ")}>
                        <p className={[styles.messageText, styles.colorWhite].join(" ")}>{ReactEmoji.emojify(text)}</p>
                    </div>
                </div>
            )
            : (
                <div className={[styles.messageContainer, styles.justifyStart].join(" ")} >
                    <div className={[styles.messageBox, styles.backgroundLight].join(" ")}>
                        <p className={[styles.messageText, styles.colorDark].join(" ")} >{ReactEmoji.emojify(text)}</p>
                    </div>
                    <p className={[styles.sentText, styles.pl10].join(" ")} >{user}</p>
                </div>
            )
    );
}

是的,'text' 是未定义的我知道了...但是只要用户输入一些文本它就会被定义。这就是为什么我的应用程序在本地主机上运行良好的原因。 但是当我尝试部署它时,它给了我这个未定义的错误。可能是因为预渲染。

从下面的组件“消息:{文本,用户},名称”正在传递到上面的组件。

function Messages({ messages, name }) {
    return (
        <ScrollToBottom className={styles.messages} >
            {
                (messages) ? messages.map((message, i) =>
                    <div key={i}>
                        <Message message={message} name={name} />
                    </div>)
                    : "null"
            }
        </ScrollToBottom>
    )
}

构建日志:

13:36:20.290    Cloning completed in 318ms
13:36:20.294    Analyzing source code...
13:36:20.824    Installing build runtime...
13:36:23.365    Build runtime installed: 2540.746ms
13:36:27.075    Installing dependencies...
13:36:43.528    > sharp@0.26.3 install /vercel/workpath0/node_modules/sharp
13:36:43.528    > (node install/libvips && node install/dll-copy && prebuild-install) || (node-gyp rebuild && node install/dll-copy)
13:36:43.730    info sharp Using cached /vercel/.npm/_libvips/libvips-8.10.0-linux-x64.tar.br
13:36:45.285    > @ampproject/toolbox-optimizer@2.7.1-alpha.0 postinstall /vercel/workpath0/node_modules/@ampproject/toolbox-optimizer
13:36:45.285    > node lib/warmup.js
13:36:45.721    Browserslist: caniuse-lite is outdated. Please run:
13:36:45.721    npx browserslist@latest --update-db
13:36:45.970    [7mAMP OPTIMIZER[0m Downloaded latest AMP runtime data.
13:36:46.337    npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.3.1 (node_modules/fsevents):
13:36:46.337    npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.3.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
13:36:46.340    added 473 packages from 1423 contributors in 18.698s
13:36:46.608    37 packages are looking for funding
13:36:46.608      run `npm fund` for details
13:36:46.643    Running "npm run build"
13:36:46.917    > xpro3@0.1.0 build /vercel/workpath0
13:36:46.917    > next build
13:36:47.640    info  - Creating an optimized production build...
13:36:47.658    Attention: Next.js now collects completely anonymous telemetry regarding usage.
13:36:47.658    This information is used to shape Next.js' roadmap and prioritize features.
13:36:47.658    You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
13:36:47.658    https://nextjs.org/telemetry
13:37:22.791    info  - Compiled successfully
13:37:22.792    info  - Collecting page data...
13:37:24.624    info  - Generating static pages (0/15)
13:37:24.900    Unhandled error during request: TypeError: Cannot read property 'text' of undefined
13:37:24.900        at Message (/vercel/workpath0/.next/serverless/pages/components/Messages/Message/Message.js:1381:5)
13:37:24.901        at d (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:33:498)
13:37:24.901        at bb (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:16)
13:37:24.901        at a.b.render (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:42:43)
13:37:24.901        at a.b.read (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:41:83)
13:37:24.901        at exports.renderToString (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:52:138)
13:37:24.902        at Object.renderPage (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:851)
13:37:24.902        at Function.getInitialProps (/vercel/workpath0/.next/serverless/pages/components/Messages/Message/Message.js:630:19)
13:37:24.902        at loadGetInitialProps (/vercel/workpath0/node_modules/next/dist/next-server/lib/utils.js:5:101)
13:37:24.902        at renderToHTML (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:1142)
13:37:24.904    Error occurred prerendering page "/components/Messages/Message/Message". Read more: https://err.sh/next.js/prerender-error
13:37:24.904    TypeError: Cannot read property 'text' of undefined
13:37:24.904        at Message (/vercel/workpath0/.next/serverless/pages/components/Messages/Message/Message.js:1381:5)
13:37:24.904        at d (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:33:498)
13:37:24.905        at bb (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:16)
13:37:24.905        at a.b.render (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:42:43)
13:37:24.905        at a.b.read (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:41:83)
13:37:24.905        at exports.renderToString (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:52:138)
13:37:24.905        at Object.renderPage (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:851)
13:37:24.905        at Function.getInitialProps (/vercel/workpath0/.next/serverless/pages/components/Messages/Message/Message.js:630:19)
13:37:24.906        at loadGetInitialProps (/vercel/workpath0/node_modules/next/dist/next-server/lib/utils.js:5:101)
13:37:24.906        at renderToHTML (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:1142)
13:37:24.910    info  - Generating static pages (3/15)
13:37:24.957    Unhandled error during request: TypeError: Cannot read property 'map' of undefined
13:37:24.958        at Messages (/vercel/workpath0/.next/serverless/pages/components/Messages/Messages.js:372:24)
13:37:24.958        at d (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:33:498)
13:37:24.958        at bb (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:16)
13:37:24.958        at a.b.render (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:42:43)
13:37:24.958        at a.b.read (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:41:83)
13:37:24.958        at exports.renderToString (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:52:138)
13:37:24.959        at Object.renderPage (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:851)
13:37:24.959        at Function.getInitialProps (/vercel/workpath0/.next/serverless/pages/components/Messages/Messages.js:773:19)
13:37:24.959        at loadGetInitialProps (/vercel/workpath0/node_modules/next/dist/next-server/lib/utils.js:5:101)
13:37:24.959        at renderToHTML (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:1142)
13:37:24.959    Error occurred prerendering page "/components/Messages/Messages". Read more: https://err.sh/next.js/prerender-error
13:37:24.959    TypeError: Cannot read property 'map' of undefined
13:37:24.960        at Messages (/vercel/workpath0/.next/serverless/pages/components/Messages/Messages.js:372:24)
13:37:24.960        at d (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:33:498)
13:37:24.960        at bb (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:36:16)
13:37:24.960        at a.b.render (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:42:43)
13:37:24.960        at a.b.read (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:41:83)
13:37:24.960        at exports.renderToString (/vercel/workpath0/node_modules/react-dom/cjs/react-dom-server.node.production.min.js:52:138)
13:37:24.960        at Object.renderPage (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:851)
13:37:24.960        at Function.getInitialProps (/vercel/workpath0/.next/serverless/pages/components/Messages/Messages.js:773:19)
13:37:24.961        at loadGetInitialProps (/vercel/workpath0/node_modules/next/dist/next-server/lib/utils.js:5:101)
13:37:24.961        at renderToHTML (/vercel/workpath0/node_modules/next/dist/next-server/server/render.js:54:1142)
13:37:25.062    info  - Generating static pages (7/15)
13:37:25.250    info  - Generating static pages (11/15)
13:37:26.301    info  - Generating static pages (15/15)
13:37:26.302    > Build error occurred
13:37:26.304    Error: Export encountered errors on following paths:
13:37:26.304        /components/Messages/Message/Message
13:37:26.304        /components/Messages/Messages
13:37:26.304        at /vercel/workpath0/node_modules/next/dist/export/index.js:30:1103
13:37:26.304        at async /vercel/workpath0/node_modules/next/dist/build/tracer.js:1:1441
13:37:26.304        at async /vercel/workpath0/node_modules/next/dist/build/index.js:39:69
13:37:26.304        at async /vercel/workpath0/node_modules/next/dist/build/tracer.js:1:1441
13:37:26.305        at async /vercel/workpath0/node_modules/next/dist/build/index.js:21:731
13:37:26.305        at async /vercel/workpath0/node_modules/next/dist/build/tracer.js:1:1441
13:37:26.369    npm ERR! code ELIFECYCLE
13:37:26.369    npm ERR! errno 1
13:37:26.372    npm ERR! xpro3@0.1.0 build: `next build`
13:37:26.373    npm ERR! Exit status 1
13:37:26.373    npm ERR! 
13:37:26.373    npm ERR! Failed at the xpro3@0.1.0 build script.
13:37:26.373    npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
13:37:26.382    npm ERR! A complete log of this run can be found in:
13:37:26.382    npm ERR!     /vercel/.npm/_logs/2021-02-06T08_07_26_373Z-debug.log
13:37:26.388    Error: Command "npm run build" exited with 1
13:37:30.870    Done with "package.json"

这个错误来自'.next/server/pages/...' 意味着这个错误不是直接来自我创建的文件,而是每当我尝试制作构建文件时来自那里。

如评论中所述,在渲染 Message 组件之前,您应该检查 message prop 不是 undefined

function Messages({ messages, name }) {
    return (
        <ScrollToBottom className={styles.messages} >
            {messages 
                ? messages.map((message, i) =>
                    message && (
                        <div key={i}>
                            <Message message={message} name={name} />
                        </div>
                    )
                  )
                : null}
        </ScrollToBottom>
    )
}

这应该可以防止您遇到的构建时错误。

除了@juliomalves

这个错误可以通过解构传递的 PROPS 来解决,只有当它被检查过后,它是否有一些价值。或者定义与否 下面是用法。

function Message({ message, name }) {

if (!message) {
    return null
}

const { text, user } = message;
.
.
.
}

如果 prop 为空则 return null else return 任何其他东西。