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

Shopify应用安装与加载时NextJS抛出'pages is undefined'错误排查求助

解决NextJS + Shopify应用中"pages is undefined"加载错误

这个错误看起来是NextJS路由解析时的pages数组未初始化导致的,结合你的路由结构和错误上下文,我整理了几个针对性的解决方案:

1. 修复重复的路由目录(最可能的核心原因)

看你的路由结构,/pages下存在两个同名的/customers目录:

  • 一个包含index.tsx和[customerId].tsx
  • 另一个包含data_request.tsx和redact.tsx

NextJS Pages Router不允许在根pages目录下出现同名的嵌套目录,这会打乱它自动生成路由列表(也就是pages变量)的逻辑,直接导致路由解析时出现pages is undefined的错误。

修复方案:
把存放GDPR Webhook的/customers目录移到/api下(因为Webhook属于后端接口),调整后的路由结构应该是:

  • /pages
    • _app.tsx
    • index.tsx
    • /customers
      • index.tsx
      • [customerId].tsx
    • /api
      • auth.tsx
      • graphql.tsx
      • /customers
        • data_request.tsx
        • redact.tsx
    • /auth
      • callback.tsx
    • /shop
      • redact.tsx

2. 优化_app.tsx的初始化顺序

Shopify应用是嵌入在Shopify后台iframe中的,路由解析可能会在App Bridge完全初始化前触发,导致NextJS的路由系统还没准备好完整的pages列表。

可以在_app.tsx中添加条件渲染,确保App Bridge和路由相关资源加载完成后再渲染页面:

import { AppProps } from 'next/app';
import { useEffect, useState } from 'react';
import AppBridge from '@shopify/app-bridge';
import { Provider } from '@shopify/app-bridge-react';

function MyApp({ Component, pageProps }: AppProps) {
  const [appReady, setAppReady] = useState(false);

  useEffect(() => {
    // 初始化Shopify App Bridge
    const app = AppBridge.create({
      apiKey: process.env.NEXT_PUBLIC_SHOPIFY_API_KEY!,
      shopOrigin: pageProps.shopOrigin,
    });

    // 标记应用就绪,确保路由解析时pages已生成
    setAppReady(true);
  }, [pageProps.shopOrigin]);

  // 未就绪时显示加载状态,避免提前触发路由解析
  if (!appReady) {
    return <div>Loading...</div>;
  }

  return (
    <Provider app={app}>
      <Component {...pageProps} />
    </Provider>
  );
}

export default MyApp;

3. 检查NextJS版本兼容性

部分旧版本的NextJS在和Shopify App Bridge配合时,会存在路由初始化的时序问题。建议升级到最新的稳定版Pages Router版本(比如13.5.x系列),或者回退到已知兼容的版本(比如12.3.x),避免版本bug导致的pages变量未定义。

4. 排查next.config.js的自定义路由配置

如果你的next.config.js中有rewrites、redirects或trailingSlash等配置,确保它们没有和动态路由冲突。比如开启trailingSlash: true可能会影响路由解析逻辑,建议暂时关闭测试,或者调整规则匹配顺序。

先试试第一个方案(修复重复路由目录),这是最可能解决问题的点,如果不行再依次尝试其他方案。

内容的提问来源于stack exchange,提问作者Paul van den Dool

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:09:07