package.json 中的依赖项更改后,Docker 无法更新 node_modules

问题描述 投票:0回答:1

我遇到一个问题:在修改

node_modules
中的依赖项后,Docker 似乎没有更新
package.json
文件夹。即使在重建 Docker 映像和容器之后,应用程序仍然会抛出与缺少依赖项相关的错误。仅当我在重建之前完全删除容器及其关联卷时,对
node_modules
的更改才会生效。

Dockerfile:

FROM node:22-alpine

RUN npm install -g npm@latest

USER node

WORKDIR /app

COPY --chown=node:node package.json package-lock.json ./

RUN npm install

COPY . .

EXPOSE 5173

CMD ["npm", "run", "dev"]

docker-compose.yml

services:
  npm-test:
    build: .
    ports:
      - "5173:5173"
    volumes:
      - .:/app
      - node_modules_docker:/app/node_modules

volumes:
  node_modules_docker:

重现步骤:

  1. 构建并运行容器(一切正常):

    docker compose up --build
    
  2. package.json
    中删除重要的依赖项,例如
    @vitejs/plugin-react

  3. 运行

    npm install
    来更新
    package-lock.json

  4. 停止并删除容器、映像和卷,然后重建(使用以下命令删除所有内容,或替换 ID 以定位特定的 ID):

    docker stop $(docker ps -q)
    docker rm $(docker ps -aq)
    docker rmi $(docker images -q)
    docker volume rm $(docker volume ls -q)
    
    docker compose up --build
    
  5. 将会出现以下错误:

    Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@vitejs/plugin-react' imported from /app/node_modules/.vite-temp/vite.config.ts.timestamp-1733299382139-6e1c72bf771df.mjs

  6. 将缺少的依赖项添加回

    package.json
    并运行
    npm install

  7. 再次构建并运行容器:

    docker compose up --build
    
  8. 应用程序应该可以再次运行(与开始时“相同”),但错误仍然存在

具有 MRE 的存储库

docker npm docker-compose node-modules npm-install
1个回答
0
投票

我的猜测是您没有删除所有卷和图像。我在使用 Vue 时遇到了同样的问题,顺便说一句,它实际上应该在您重建时起作用,但事实并非如此。所以我只是删除了图像本身和卷。如果您输入

docker system prune -af --volumes
仍然存在卷,该命令不会完全删除所有图像、卷和容器。我必须输入
docker volume prune -a
才能删除所有卷。因此,您可以尝试像以前一样删除所有内容,但在再次构建之前,只需输入
docker volume ls
docker image ls
即可确定。

© www.soinside.com 2019 - 2024. All rights reserved.