首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法找到带有Next.js和客户服务器构建的“页面”目录

无法找到带有Next.js和客户服务器构建的“页面”目录
EN

Stack Overflow用户
提问于 2021-12-05 16:44:59
回答 1查看 834关注 0票数 1

我目前正在尝试为一个应用程序创建一个两阶段构建,该应用程序运行于Next.js (版本12.0.6),并有一个用于API的自定义服务器。我不想在每次停靠器运行时重新构建应用程序,所以我将编译的文件复制到/app目录中。我假设页面目录将在.next文件夹中自动工作,但不幸的是,它不能工作。

虽然这个应用程序构建得很好,但我被这个问题困扰着:

代码语言:javascript
运行
复制
Error: > Couldn't find a `pages` directory. Please create one under the project root
    at Object.findPagesDir (/app/node_modules/next/dist/lib/find-pages-dir.js:33:11)
    at /app/node_modules/next/dist/build/index.js:113:45
    at async Span.traceAsyncFn (/app/node_modules/next/dist/trace/trace.js:74:20)
    at async Object.build [as default] (/app/node_modules/next/dist/build/index.js:82:25)

我的Docker文件如下所示:

代码语言:javascript
运行
复制
FROM node:lts-slim AS base
WORKDIR /base
COPY package*.json ./
RUN npm install
COPY . .

FROM base AS build
ENV NODE_ENV=production
WORKDIR /build
COPY --from=base /base ./

CMD mkdir ./pages
RUN npm run build

FROM node:lts-slim AS production

ENV NODE_ENV=production
WORKDIR /app

COPY --from=build /build/next.config.js ./
COPY --from=build /build/package*.json ./
COPY --from=build /build/.next ./.next
COPY --from=build /build/public ./public
COPY --from=build /build/dist ./dist

# RUN mkdir pages; < uncommenting this will silence the error but it's an empty fake directory

RUN npm install
EXPOSE 3000

CMD npm run start

我像这样启动Next.js服务器(对于dev属性也尝试了硬编码false,但没有成功):

代码语言:javascript
运行
复制
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });

项目中的国家预防机制命令如下:

代码语言:javascript
运行
复制
 "scripts": {
    "prestart": "next build",
    "dev": "NODE_ENV=development ts-node --project tsconfig.server.json server/index.ts",
    "next-dev": "next dev",
    "build:server": "tsc --project tsconfig.server.json",
    "build:next": "next build",
    "build": "npm run build:next && npm run build:server",
    "next-start": "next start",
    "start": "NODE_ENV=production node ./dist/server/index.js",
    "test": "jest"
  },

到目前为止我尝试过的事情:

  • 在创建服务器时修改dir目录。不幸的是,在默认情况下,它似乎是正确的,直接指向/app并更改它无助于
  • 在next.config中摆弄distDir。不幸的是,与上面的结果相同,
  • 在/app中创建了一个空页文件夹。这似乎不起作用-页面是从那个文件夹加载的,而且由于所有东西里面什么都没有,所以会产生404。
  • 将整个构建复制到应用程序中。虽然这会创建页面文件夹并工作,但它完全违背了多阶段build.
  • Copying只使用页面文件夹的目的。这很不幸地失败了,因为它对所有其他文件夹都有依赖。

有人能告诉我如何解决这个问题吗?我完全没有想法了,希望我在这里错过了一些愚蠢的东西。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-06 18:55:34

我自己回答,因为我得到它“工作”,它可能会帮助其他人。

出于一个我无法理解的原因,在package.json中创建一个单独的运行脚本可以阻止Next.js在应用程序启动时重新编译自己。

重申所采取的步骤:

使用npm的recompile.

  • Creating
  • 导致整个解决方案用于package.json,在package.json中有一个新的运行行(我称之为npm )防止了这种情况的发生。服务器从编译好的js文件中完美地运行,并立即运行.

很管用,但我不知道为什么。如果有人有洞察力的话,我很高兴听到!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70236426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档