如何告诉 WebStorm 在 Docker 容器中查找项目?

yah*_*rga 8 webstorm

我的当前项目目录如下所示:

.
??? backend
?   ??? Dockerfile # NestJS Dockerfile.
?   ??? docker # Folder that contains docker-compose.yml file.
?   ??? package.json
?   ??? src
??? frontend
    ??? Dockerfile # Angular Dockerfile.
    ??? package.json
    ??? src
Run Code Online (Sandbox Code Playgroud)

我的docker-compose.yml文件看起来像这样:

version: "3.7"
services:
  # ########################
  # Back-End Container
  # ########################
  backend: # Node-Express backend that acts as an API.
    container_name: nest_backend
    build:
      context: ../
    restart: always
    expose:
      - 3000
    ports:
      - "3000:3000"
    volumes:
      - /home/node/node_modules
      - "../:/home/node/"
  # ########################
  # Front-End Container
  # ########################
  frontend: # Angular frontend to be served to client.
    container_name: angular_frontend
    build:
      context: ../../frontend/
    restart: always
    expose:
      - 4200 # Angular ng-serve port.
      - 49153 # Websocket port for live reloading.
    ports:
      - "49153:49153"
      - "4200:4200"
    volumes:
      - /home/node/node_modules
      - "../../frontend/:/home/node/"
    depends_on:
      - backend
networks:
  default:

Run Code Online (Sandbox Code Playgroud)

我想使用 Docker 并且不会失去使用 WebStorm 作为 IDE 的好处。例如,它告诉我未安装 tslint 包,我需要运行npm install才能安装该node_modules文件夹。但是,我的node_modules文件夹仅存在于容器中。有什么方法可以让 WebStorm 正常工作吗?

我知道有一种叫做路径映射的东西,我已经尝试配置它,但没有任何反应;它仍然告诉我安装软件包。

这是我到目前为止所做的:

我已经按照这里的教程进行了操作

  • 转到调试按钮旁边窗口右上角的编辑配置
  • 单击+号并选择Node.js
  • 单击Node interpreter旁边的...
  • 单击+号,选择Add Remote...
  • 从单选按钮中选择Docker Compose,单击Configuration file(s)旁边的文件夹图标,然后从下拉菜单Service 中选择适当的服务
  • 在所有内容上单击“确定”并运行它。它会运行,给出找不到命令的错误。

当我运行时docker-compose up,一切运行顺利。当我尝试添加运行配置Run > Edit Configurations...以添加 (+)Docker-compose运行并将其指向docker-compose.yml文件时,它也能顺利运行。

我希望完成的是在 Docker 中使用 IDE 的功能。目前,它不知道去哪里寻找tslint配置,或者node_modules.

arg*_*rgo 5

太长了;

技巧是将 docker 容器内的路径从 更新/your-path/opt/project

详细解决方案

webstorm 的问题是它们不允许您定义可以选择的路径node_modules。但他们有一个默认路径可供选择。当我想为 docker 内运行的后端节点服务集成远程调试时,我遇到了同样的问题。

您需要更新您的 docker 文件。假设你使用的 Dockerfile 是这样的

# pull official base image
FROM node:12.11-buster

# set working directory
WORKDIR /app

COPY ./package.json ./package-lock.json /app

RUN npm install

Run Code Online (Sandbox Code Playgroud)

现在,这不会检测用于远程调试的 node_modules 或 webstorm 中所需的任何其他集成。

但是如果你将 dockerfile 更新为这样的

# pull official base image
FROM node:12.11-buster

# set working directory
# This done particularly for enabling debugging in webstorm.
WORKDIR /opt/project

COPY ./package.json ./package-lock.json ./.npmrc /opt/project

RUN npm install

Run Code Online (Sandbox Code Playgroud)

然后网络风暴就能够按预期检测到一切。

/your-path技巧是将路径更新为/opt/project

你的 docker-compose 文件应该看起来像这样:

version: "3.7"
services:
  backend-service:
    build:
      dockerfile: ./Dockerfile.local
      context: ./
    command: nodemon app.js
    volumes:
      - ./:/opt/project
      - /opt/project/node_modules/
    ports:
      - 6060:6060
    
Run Code Online (Sandbox Code Playgroud)

您可以在我的博客中阅读更多相关信息