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



我遵循了本教程,它工作得很好,但当我尝试dockerize时,构建是可以的,但当我运行图像时出现错误:错误:无法找到模块'express'

DockerFile

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

  • 浏览器——在- - - fr
  • 服务器——在- - - frproxy-server.js

proxy-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线开始一个新的构建阶段时,构建序列基本上从头开始;在最终的映像中没有任何东西,除非您明确地在那里COPYRUN安装步骤。

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

之后重新运行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"]

最新更新