【发布时间】:2020-06-27 04:33:08
【问题描述】:
项目设置
我有一个在本地 Docker 容器中运行的 Typescript 项目。我有以下两卷(这是在docker-compose.yml):
volumes:
- .:/node/app
第一个卷是绑定挂载,用于将我的应用程序的源代码复制到容器中。
- /node/app/node_modules/
第二卷在绑定装载。这意味着当npm install 在容器内运行时,在项目的/node/app 工作目录中,依赖项将被安装到容器中的node_modules 文件夹中。
我的理解是,允许主机和容器拥有单独的node_modules 是一种常见的做法。我对此设置的意图是仅在主机中安装和运行一些工具,例如 prettier,因此我可以在主机中 npm install --only=development 并安装 prettier,因为它指定为 devDependency,并且现在我的编辑器可以使用 prettier。
问题
在我的编辑器中,当 typescript 编译器运行时,它显示“找不到模块”错误:
我的理解是发生这种情况是因为这些模块不在磁盘上。这是因为我的上述设置。我制作了包含我的非开发依赖项的node_modules,例如 React,仅在容器内可用。
我的问题
我是 Docker 新手,我的理解是在容器内做事情通常是好的,包括开发。我试图避免在主机中出现npm install,因为我并不真正想要或不需要主机中的所有依赖项。在添加新依赖项时,我也不想npm install 两次,一次在主机上,一次在容器中。
如果导入的 node_modules 不存在,有没有办法阻止 Typescript 出错(比如只加载它们的类型定义,maye?),或有没有办法在 Visual 中指向 Typescript 的编译器Studio Code 以某种方式添加到容器中,因此无需在主机上安装它们就可以看到它们,同时仍然让我在主机上安装其他依赖项,比如更漂亮?
或者是在主机上npm install的唯一方法?
【问题讨论】:
-
我遇到了同样的情况,如果你使用 VSCode,我发现的一个选项是使用 Remote - Containers 扩展。它允许您插入容器并直接在那里工作。 link
标签: typescript docker visual-studio-code