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

Next.js 13.4.5集成Firebase 10.1.0时'encoding'模块缺失错误求助

Next.js 13.4.5 + Firebase 10.1.0 无法解析'encoding'模块问题解决

环境信息

  • Next.js 版本:13.4.5
  • Firebase 版本:10.1.0

报错信息

警告

  • warn ./node_modules/node-fetch/lib/index.js Module not found: Can't resolve 'encoding' in '/Users/dev/node_modules/node-fetch/lib'
    导入追踪:./node_modules/node-fetch/lib/index.js → ./node_modules/@firebase/auth/dist/node-esm/index.js → ./node_modules/firebase/auth/dist/index.mjs → ./src/app/context/authContext.tsx → ./src/app/project/page.tsx

错误

导入追踪同上

  • error undefined
  • error undefined

相关代码片段

authContext.tsx

"use client";
import {
  useContext,
  createContext,
  useState,
  useEffect,
  ReactNode,
} from "react";
import {
  User,
  GoogleAuthProvider,
  signInWithRedirect,
  signOut,
  onAuthStateChanged,
} from "firebase/auth";
import { auth } from "@/app/utils/firebase";
import { useGoToPage } from "@/app//hooks/useGoToPage";

interface IAuthContext {
  user: User | null;
  googleSignIn: () => void;
  logOut: () => void;
}

const AuthContext = createContext<IAuthContext>({
  user: null,
  googleSignIn: () => {},
  logOut: () => {},
});

interface AuthContextProviderProps {
  children: ReactNode;
}

export const AuthContextProvider = ({ children }: AuthContextProviderProps) => {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState(true);

  const [{ goToSignInPage }] = useGoToPage();

  const googleSignIn = async () => {
    const provider = new GoogleAuthProvider();
    signInWithRedirect(auth, provider);
  };

  const logOut = () => {
    signOut(auth);
    goToSignInPage();
  };

  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
      setUser(currentUser);
      setLoading(false);
    });

    if (!user && !loading) {
      goToSignInPage();
    }
    return () => unsubscribe();
  }, [user, goToSignInPage, loading]);

  return (
    <AuthContext.Provider value={{ user, googleSignIn, logOut }}>
      {children}
    </AuthContext.Provider>
  );
};

export const UserAuth = (): IAuthContext => {
  return useContext(AuthContext);
};

firebase.ts

import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";

const firebaseConfig = {
  apiKey: process.env.NEXT_PUBLIC_API_KEY,
  authDomain: process.env.NEXT_PUBLIC_DOMAIN,
};

const app = initializeApp(firebaseConfig);
export const auth = getAuth(app);

解决方案

  1. 安装缺失的encoding依赖
npm install encoding
  1. 配置Next.js webpack fallback(若步骤1无效)
    在项目根目录的next.config.js(没有则新建)中添加以下配置:
/** @type {import('next').NextConfig} */
const nextConfig = {
  webpack: (config) => {
    config.resolve.fallback = {
      ...config.resolve.fallback,
      encoding: require.resolve('encoding'),
    };
    return config;
  },
};

module.exports = nextConfig;
  1. 重启开发服务
npm run dev

内容的提问来源于stack exchange,提问作者aaa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:02:49