如何解决Dockerise Angular 11 - i18n SSR找不到模块 express
我遵循了 this tutorial 并且它运行良好,但是当我尝试 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
- 浏览器 -- zh -- fr
- 服务器 -- zh -- fr 代理服务器.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
行开始新的构建阶段时,构建序列基本上完全重新开始;除非您明确COPY
在那里RUN
或npm install
安装步骤,否则最终映像中不会有任何内容。
使用典型的“在第一阶段构建,在第二阶段运行”设置,您可以跳过在最后阶段安装开发依赖项。这将建议在设置 NODE_ENV=production
后重新运行 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"]
:
[[1 2 3]
[1 2 3]
[1 2 3]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。