在这篇文章和Twitter上进行了一些讨论后,似乎没有简单的方法可以通过Webpack实现我想要的功能。这些文件仅在运行时作为静态文件提供,并且无法在构建时排除文件并在运行时包含它。
因此,我决定采用我所想到的解决方案/解决方法:在启动Docker容器时更改静态文件。
我创建Docker镜像的方式是:
npm run build:prod
docker build -t angularapp .
我正在使用官方的nginx docker镜像作为我的基础镜像,Dockerfile如下:
FROM nginx:1.11.1
COPY dist /usr/share/nginx/html
COPY run.sh /run.sh
CMD ["bash", "/run.sh"]
run.sh
用于通过sed
修改配置文件,并在此之后启动nginx:
#!/bin/sh
/bin/sed -i "s|http://localhost:8080|${BASE_URL}|" /usr/share/nginx/html/api.config.chunk.js
nginx -g 'daemon off;'
这使得我能够通过环境变量在我的docker-compose.yml文件中配置BASE_URL(简化版):
version: '2'
services:
api:
image: restapi
frontend:
image: angularapp
environment:
BASE_URL: https://api.test.example.com
通过这个解决方案/变通方法,我可以部署由我的Jenkins工作创建的Docker镜像,以便在所有环境(开发,预发布,生产)中都能使用REST API端点进行配置,只需在启动Docker容器时设置环境变量即可。