我将所有npm依赖项都安装到了容器中。因此,我不想在我的主机上安装依赖项。一切都很好,它可以工作。但是Webstorm存在问题。
对于npm依赖性,它说“未解决的功能”。 如何解决这个问题?我怎么说“嘿webstorm,node_modules目录在容器内:)”
答案 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
中查看更多详细信息