我是Next.js和Docker的新手。我试图实现的是用Docker部署一个Next.js项目。我正在创建Dockerfile和docker-compose.yml文件。但是,该项目有一些自定义包,它在源文件夹之外使用(在根级别上)。我的构建步骤失败了,因为它不能解析这些包。COPY
这是汇入的外观
import Theme, { theme } from '@custompackage/themes/src/Simply';
import {
Navbar,
Copyright,
Welcome,
Services,
About,
Pricing,
Clients,
Contact,
} from '@custompackage/themes/src/Simply/containers';
import preview from '@custompackage/themes/src/Simply/assets/preview.jpg';
这是我的Dockerfile
# Install dependencies only when needed
FROM node:16-alpine AS deps
WORKDIR /opt/app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# Rebuild the source code only when needed
# This is where because may be the case that you would try
# to build the app based on some `X_TAG` in my case (Git commit hash)
# but the code hasn't changed.
FROM node:16-alpine AS builder
ENV NODE_ENV=production
WORKDIR /opt/app
COPY . .
COPY --from=deps /opt/app/node_modules ./node_modules
RUN yarn build
# Production image, copy all the files and run next
FROM node:16-alpine AS runner
ARG X_TAG
WORKDIR /opt/app
ENV NODE_ENV=production
COPY --from=builder /opt/app/next.config.js ./
COPY --from=builder /opt/app/public ./public
COPY --from=builder /opt/app/.next ./.next
COPY --from=builder /opt/app/node_modules ./node_modules
CMD ["node_modules/.bin/next", "start"]
文件夹结构
我试过在构建步骤之前使用Dockerfile中的COPY
命令将包内容复制到/opt/app
文件夹中,这样就可以解析它们。但是,我不确定我是否做对了,一直没有结果。
1条答案
按热度按时间s3fp2yjn1#
你当然可以找到一种方法,使您的应用程序工作,而不改变目录结构,但我不认为你应该。
模块导入的
import
关键字应属于以下两类之一:*应用程序代码,位于源文件夹中
*依赖项通常位于
node_modules
文件夹中如果您希望将多个软件包放入一个存储库中,则应查看monorepo pattern。
由于您使用的是yarn,因此可以查看Yarn提供的构建monorepo的解决方案Yarn Workspace。
您可能需要将目录结构稍微更改为如下所示的结构:
在
package.json
中,您将把custom-package-1
添加到您的dependencies
中,并且您的monorepo工具将神奇的把custom-package-1
包含在您的依赖项中(主要是通过创建一些符号链接)。