如何在WebStorm上使用远程node_modules(内部容器)?

时间:2018-12-18 15:22:15

标签: node.js docker webstorm

我将所有npm依赖项都安装到了容器中。因此,我不想在我的主机上安装依赖项。一切都很好,它可以工作。但是Webstorm存在问题。

对于npm依赖性,它说“未解决的功能”。 如何解决这个问题?我怎么说“嘿webstorm,node_modules目录在容器内:)”

3 个答案:

答案 0 :(得分:1)

WebStorm期望node_modules位于项目文件夹中。

您可以尝试在 Node.js 运行配置模板中设置NODE_PATH运行|编辑配置... ,展开模板节点,选择 Node.js 配置,在环境变量中指定NODE_PATH字段

请查看https://youtrack.jetbrains.com/issue/WEB-19476中的评论。

但是我不确定它是否适用于安装在容器中的模块...

答案 1 :(得分:1)

即使公开了容器的node_modules文件夹,它也可能无法按预期工作,因为npm依赖项是根据其宿主环境构建的,这与您的本地dev计算机不同。

如果您要运行某些CLI开发工具,则此语句的适用范围更强  -有时是编译的二进制文件。

答案 2 :(得分:0)

TLDR;

技巧是将 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

现在这不会检测用于远程调试的 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

然后 webstorm 能够按预期检测到所有内容。

技巧是将路径从 /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
    

您可以在this blog

中查看更多详细信息