我们正在Docker容器中部署我们的生产Angular4 webapp。我们的Dockerfile如下所示:
FROM alpine
RUN apk add --update python \
python-dev \
py-pip \
nodejs \
nodejs-npm \
openssl \
nginx
RUN pip install jinja2
RUN npm -g config set user root
RUN npm install -g @angular/cli
RUN mkdir /app
ADD web /tmpbuild
WORKDIR /tmpbuild
RUN npm install
RUN ng build --env=prod
RUN mkdir /app/html
RUN cp -R dist/* /app/html/
RUN rm -rf /tmpbuild
ADD app /app
WORKDIR /app
RUN chmod 755 start.sh
ENTRYPOINT /app/start.sh
因为我们希望我们的开发环境与我们的生产环境相匹配,所以我们也使用相同的Dockerfile在本地容纳我们的webapp。问题是 - 我们如何将开发中编译的文件与生产容器中的文件保持一致,同时还实时重新加载?如果我们在Dockerfile中使用ng serve
而不是ng build --env=prod
进行开发,那么实时重新加载将按预期工作。但是,当ng build
没有时,运行ng serve
可能会失败(例如,使用aot编译禁止在某些情况下使用ng build
而不是ng serve
使用私有变量),这就是为什么我们需要命令在开发和生产之间保持一致。
是否有其他推荐方法可以使用ng build
实现实时重新加载?