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
- 浏览器
-- zh
-- fr
- 服务器
-- zh
-- FR
代理-server.js
代理-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"]
我已经关注 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
- 浏览器 -- zh -- fr
- 服务器 -- zh -- FR 代理-server.js
代理-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
:
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"]