Dockerise Angular 11 - i18n SSR(找不到模块 express)

Dockerise Angular 11 - i18n SSR (cannot find module express)

我已经关注 this tutorial 并且它运行良好但是当我尝试 dockerize 时,构建没问题但是当我 运行 图像时出现错误:错误:找不到模块 'express'

Docker文件

    FROM node:12 as buildContainer
    WORKDIR /app
    COPY ./package.json ./package-lock.json /app/
    RUN npm install
    COPY . /app
    # max-old-space is needed to avoid any compilation issues because of missing memory
    ENV NODE_OPTIONS --max-old-space-size=2048
    RUN npm run build:ssr

    FROM node:12-alpine

    WORKDIR /app
    COPY --from=buildContainer /app/package.json /app

    # Get all the code needed to run the app
    COPY --from=buildContainer /app/dist /app/dist

    EXPOSE 4000

    ENV NODE_ENV production
    CMD ["npm", "run", "serve:ssr"]

我的 dist 结构是:

dist\app

代理-server.js

    const express = require("express");
    const path = require("path");

    const getTranslatedServer = (lang) => {
      const distFolder = path.join(
        process.cwd(),
        `dist/morefont-v4/server/${lang}`
      );
      const server = require(`${distFolder}/main.js`);
      return server.app(lang);
    };

    function run() {
      const port = 4000;

      // Start up the Node server
      const appFr = getTranslatedServer("fr");
      const appEn = getTranslatedServer("en");

      const server = express();
      server.use("/fr", appFr);
      server.use("/en", appEn);
      server.use("", appEn);

      server.listen(port, () => {
        console.log(`Node Express server listening on http://localhost:${port}`);
      });
    }

    run();

可选问题:您是否有将 I18n 与 Angular SSR 一起使用的正确方法?

问题:如何修复我的 Docker 图像以便导入 node_modules?

谢谢

当您使用 FROM 行开始一个新的构建阶段时,构建序列基本上完全重新开始;除非您明确地 COPY 那里或 RUN 安装步骤,否则最终图像中不会有任何内容。

使用典型的“在第一阶段构建,运行 在第二阶段”设置,您可以跳过在最后阶段安装开发依赖项。这将建议在设置 NODE_ENV=production:

后重新 运行ning npm install
FROM node:12-alpine
WORKDIR /app
COPY --from=buildContainer /app/package.json .

# Install dependencies (but not devDependencies)
ENV NODE_ENV production  # move this up from the bottom
RUN npm install          # add this

COPY --from=buildContainer /app/dist ./dist
EXPOSE 4000
CMD ["npm", "run", "serve:ssr"]