And*_*Ray 6 typescript docker visual-studio-code
项目设置
我有一个在本地 Docker 容器中运行的 Typescript 项目。我有以下两卷(在docker-compose.yml
):
volumes:
- .:/node/app
Run Code Online (Sandbox Code Playgroud)
第一个卷是绑定安装,用于将我的应用程序的源代码复制到容器中。
- /node/app/node_modules/
Run Code Online (Sandbox Code Playgroud)
第二卷位于绑定安装座内。这意味着当npm install
在容器内运行时,在项目的/node/app
工作目录中,依赖项将仅安装到容器中的node_modules
文件夹中。
我的理解是,这是允许主机和容器独立的常见做法node_modules
。我进行此设置的目的是仅在主机中安装和运行一些工具,例如prettier,这样我就可以npm install --only=development
在主机中安装 prettier ,因为它被指定为 devDependency ,现在我的编辑器可以使用 prettier 。
问题
在我的编辑器中,当打字稿编译器运行时,它显示“找不到模块”错误:
我的理解是发生这种情况是因为这些模块不在磁盘上。这是因为我上面的设置。我已经将node_modules
包含非开发依赖项(如 React)的内容仅在容器内可用。
我的问题
我是 Docker 新手,我的理解是在容器内做事情通常很好,包括开发。我试图避免npm install
在主机中,因为我并不真正想要或需要主机中的所有依赖项。在添加新的依赖项时,我也不想必须执行npm install
两次,一次在主机上,一次在容器中。
如果导入的node_modules不存在,有没有办法阻止Typescript出错(比如只加载它们的类型定义,也许?),或者有没有办法以某种方式将Visual Studio Code中的Typescript编译器指向容器,这样它就可以无需在主机上安装它们即可看到它们,同时仍然允许我在主机上安装其他依赖项,例如更漂亮?
npm install
或者是主机上的唯一方法?
node_modules
如果您想在 docker 内部和外部安装模块,则安装单独的卷是很常见的。例如,如果您想在 docker 容器之外运行项目,并且能够在 docker 容器中运行它。
您所建议的,将一些模块放在容器内,将其他模块放在容器外,我不确定是否有必要这样做。prettier
也许更好的解决方案是在 docker 容器内运行......
services:
prettier:
image: node:latest
volumes:
- .:/node/app
working_dir: /node/app
entrypoint: npx prettier
Run Code Online (Sandbox Code Playgroud)
然后你就可以运行
docker-compose run --rm prettier <options>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2380 次 |
最近记录: |