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

在Vercel部署Next.js应用时遭遇ENOENT文件不存在错误

Vercel部署Next.js应用后文件找不到问题

错误详情

部署后后端访问文件时出现以下错误:

[Error: ENOENT: no such file or directory, open '/var/task/problems/add-two-numbers/boilerplate-full/function.java'] { errno: -2, code: 'ENOENT', syscall: 'open', path: '/var/task/problems/add-two-numbers/boilerplate-full/function.java', digest: '3522486023' }

本地开发环境中文件存在且运行正常,但Vercel上无法找到/var/task/problems目录下的.java等文件。

项目结构

next-app:
--problems:
----add-two-numbers:
------boilerplate-full:
--------function.java
--------function.py
--------function.js
------inputs:
--------0.txt
--------1.txt
------outputs:
--------0.txt
--------1.txt
----other-problems:
--src:
----actions:
------problem.js:
----app:
------problem/[...problemSlug]/page.js
------page.jsx
------layout.jsx

相关代码(src/actions/problem.js)

"use server";

import fs from "fs";
import path from "path";
import { LanguagesToExtension } from "./types";

const MOUNT_PATH = path.join(process.cwd(), "problems");

export const getProblem = async (problemSlug, languageId) => {
  languageId = LanguagesToExtension[languageId];
  const fullBoilderPlate = await getProblemFullBoilerplateCode(
    problemSlug,
    languageId
  );

  const inputs = await getProblemInputs(problemSlug);
  const outputs = await getProblemOutputs(problemSlug);

  return {
    id: problemSlug,
    fullBoilerplateCode: fullBoilderPlate,
    inputs: inputs,
    outputs: outputs,
  };
};

async function getProblemFullBoilerplateCode(problemSlug, languageId) {
  return new Promise((resolve, reject) => {
    fs.readFile(
      `${MOUNT_PATH}/${problemSlug}/boilerplate-full/function.${languageId}`,
      { encoding: "utf-8" },
      (err, data) => {
        if (err) {
          reject(err);
        }
        resolve(data);
      }
    );
  });
}

async function getProblemInputs(problemSlug) {
  return new Promise((resolve, reject) => {
    fs.readdir(
      `${MOUNT_PATH}/${problemSlug}/tests/inputs`,
      async (err, files) => {
        if (err) {
          console.log(err);
        } else {
          await Promise.all(
            files.map((file) => {
              return new Promise((resolve, reject) => {
                fs.readFile(
                  `${MOUNT_PATH}/${problemSlug}/tests/inputs/${file}`,
                  { encoding: "utf-8" },
                  (err, data) => {
                    if (err) {
                      reject(err);
                    }
                    resolve(data);
                  }
                );
              });
            })
          )
            .then((data) => {
              resolve(data);
            })
            .catch((e) => reject(e));
        }
      }
    );
  });
}

async function getProblemOutputs(problemSlug) {
  return new Promise((resolve, reject) => {
    fs.readdir(
      `${MOUNT_PATH}/${problemSlug}/tests/outputs`,
      async (err, files) => {
        if (err) {
          console.log(err);
        } else {
          await Promise.all(
            files.map((file) => {
              return new Promise((resolve, reject) => {
                fs.readFile(
                  `${MOUNT_PATH}/${problemSlug}/tests/outputs/${file}`,
                  { encoding: "utf-8" },
                  (err, data) => {
                    if (err) {
                      reject(err);
                    }
                    resolve(data);
                  }
                );
              });
            })
          )
            .then((data) => {
              resolve(data);
            })
            .catch((e) => reject(e));
        }
      }
    );
  });
}

已尝试的路径写法

此前problems文件夹位于src目录下,曾尝试以下路径配置:

  • const MOUNT_PATH = path.relative(__dirname,"src","problems");
  • const MOUNT_PATH = path.join("src", "problems");

已确认信息

  • 文件路径本地验证正确
  • 文件已提交至GitHub并包含在构建产物中
  • 怀疑问题与Vercel文件系统或配置有关

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:20:19