在docker生产服务器上编译webpack

mac*_*atu 1 config docker webpack docker-compose

我正在为我的 React/Redux 应用程序设置 docker,我想知道如何以这种方式设置它,即在生产中,在容器设置中,webpack 使用生产配置编译我的整个代码,然后它删除自身,或者其他什么像那样。因为我的项目唯一需要的是生产代码和一个为其提供服务的简单节点服务器。

我不确定我是否解释得很好,因为 docker 和 webpack 对我来说仍然是新事物。

编辑:或者,我什至可以使用 apache 服务器提供所有内容,但我希望在运行 docker-compose 时编译和设置所有内容。

Jul*_*SIN 5

如果我理解正确的话,在 docker 构建过程中 npm run 构建之后,您希望从映像中删除节点开发依赖项。

你可以做到,但有一个小技巧你必须注意。Dockerfile 中的每一行都会导致映像中的一个新步骤,并与映像一起推送。因此,如果您在 Dockerfile 中执行:

RUN npm install     # Install dev and prod deps
RUN npm run build   # Execute your webpack build
RUN npm prune --production # Trash all devDependencies from your node_modules folder
Run Code Online (Sandbox Code Playgroud)

您的图像尺寸将包含:

  • 第一个 npm 安装
  • npm 运行构建
  • npm 剪枝的结果

您的图像将不仅仅是:

RUN npm install     # Install dev and prod deps
RUN npm run build   # Execute your webpack build
Run Code Online (Sandbox Code Playgroud)

其中包含:

  • 第一个 npm 安装
  • npm 运行构建

为了避免这个问题,你必须在 dockerfile 中执行以下操作:

RUN npm install && npm run build && npm prune --production
Run Code Online (Sandbox Code Playgroud)

这样你就会得到一个简约的图像。和 :

  • npm 运行构建
  • npm 剪枝的结果

你的最终 Dockerfile 将是某种:

FROM node:7.4.0

ADD . /src
RUN cd /src && npm install && npm run build && npm prune --production  # You can even use npm prune without the --production flag

ENV NODE_ENV production
Run Code Online (Sandbox Code Playgroud)