Sha*_*ota 2 git node.js docker jestjs
我已经构建了一个具有以下文件结构的 Web 项目:
-root_folder/
-docker-compose.yml
-.git/
-backend/
-.dockerignore
-docker/
-dev.dockerfile
-frontend/
-.dockerignore
-docker/
-dev.dockerfile
Run Code Online (Sandbox Code Playgroud)
我在 Docker 容器中运行前端应用程序 (Angular)。我还在另一个容器中运行后端应用程序 (ExpressJS),但后端与我的问题无关。
我已将卷 ./frontend 安装到容器中的 /app 以允许热重新加载。
这个配置可以很好地运行 Angular。但是,当运行带有 --watch 标志的 Jest 时,它给出了错误--watch is not supported without git/hg, please use --watchAll
我回到 dockerfile 并添加:
RUN apk update -q && \
apk add -q git
Run Code Online (Sandbox Code Playgroud)
但这并不能解决问题。从我所做的所有研究来看,问题似乎是 Jest 监视模式以某种方式使用 git 来检测更改,但我的 git 文件夹不在“前端”子目录中。
我试图修改我的容器以将所有文件复制到 /app/frontend ,然后也复制并挂载 .git 文件夹到 /app/.git 但这没有效果。
我不想用 --watchAll 运行 Jest(但我测试了它并且运行正常)。有什么建议?
编辑回答了我自己的问题。我在安装 .git 文件夹时走在正确的轨道上。缺少的步骤是设置 GIT_WORK_TREE 和 GIT_DIR 环境变量。
我能够完全按照我的意愿进行工作。问题是,为了让 Jest 在监视模式下运行,它通过根据 Git 查看更改的文件来实现。通过在类似于我的主机系统的容器上设置目录结构,我能够使用此功能:
-app/
-.git/
-frontend/
Run Code Online (Sandbox Code Playgroud)
然后,最重要的是,设置 GIT_WORK_TREE 和 GIT_DIR 环境变量。
这是我的 dockerfile:
FROM node:alpine3.11 as dev
WORKDIR /app/frontend
# To use packages in CLI without global install
ENV PATH /app/frontend/node_modules/.bin:$PATH
COPY . .
RUN npm install --silent
EXPOSE 4200
CMD ["/bin/sh", "-c", "npm run start:dev"]
##########################################################
FROM dev as unit-test
ENV GIT_WORK_TREE=/app/frontend GIT_DIR=/app/.git
RUN apk update && \
apk add git
CMD ["/bin/sh", "-c", "jest --watch"]
Run Code Online (Sandbox Code Playgroud)
如果没有设置 env vars,Jest 会继续给出没有 git 就无法工作的错误。我假设这是因为git init从来没有运行过,它可能在幕后做了一些其他的事情,在 .git 文件夹中复制没有完成。
这是我用于测试服务的 docker-compose 以防它帮助某人:
f-test-unit:
container_name: "f-test-unit"
build:
context: "frontend"
dockerfile: "docker/dev.dockerfile"
target: "unit-test"
volumes:
- "./frontend:/app/frontend"
- "/app/frontend/node_modules/"
- "./.git:/app/.git"
tty: true
stdin_open: false
Run Code Online (Sandbox Code Playgroud)
旁注:如果你添加 tty 和 stdin_open 行,它允许你在 docker 容器中的日志被着色,这对 Jest 非常有用。
| 归档时间: |
|
| 查看次数: |
1573 次 |
| 最近记录: |