项目设置
我有一个正在本地Docker容器中运行的Typescript项目。我有以下两个卷(在docker-compose.yml
中):
volumes:
- .:/node/app
第一个卷是绑定装载,用于将我的应用程序的源代码复制到容器中。
- /node/app/node_modules/
第二个卷位于绑定安装中内部。这意味着当npm install
在容器中运行时,在项目的/node/app
工作目录中,依赖项将仅安装到容器中的node_modules
文件夹中。 >
我的理解是,这是允许主机和容器具有单独的node_modules
的常见做法。我打算进行此设置的目的是仅在主机中安装和运行一些工具,例如更漂亮,因此我可以npm install --only=development
在主机中安装更漂亮的设备,将其指定为devDependency ,现在我的编辑器可以使用更漂亮了。
问题
在我的编辑器中,当打字稿编译器运行时,它向我显示“找不到模块”错误:
我的理解是,发生这种情况是因为这些模块不在磁盘上。这是由于我的上述设置。我已经使node_modules
包含我的非开发依赖项,例如React,仅在容器内部可用。
我的问题
我是Docker的新手,我的理解是,在容器内做事情(包括开发)通常是件好事。我试图避免在主机中使用npm install
,因为我实际上并不需要主机中的所有依赖项。我也不想在添加新的依赖项时两次npm install
,一次在主机上,一次在容器中。
如果不存在导入的node_modules,是否有办法阻止Typescript错误(例如,仅加载它们的键入定义,可以吗?),或有办法在Visual中指向Typescript的编译器Studio代码以某种方式添加到容器中,这样它就可以看到它们而不必将它们安装在主机上,同时仍然可以让我在主机上安装其他依赖项,例如更漂亮?
还是在主机上访问npm install
的唯一方法?
答案 0 :(得分:0)
如果要在docker内部和外部安装模块,通常会为node_modules
安装单独的卷。例如,如果您想在docker容器之外运行项目,并能够在docker容器中运行它。
您的建议是,在容器内有一些模块,而在容器外有其他模块,我不确定是否有需要。也许更好的解决方案是只在您的docker容器中运行prettier
...
services:
prettier:
image: node:latest
volumes:
- .:/node/app
working_dir: /node/app
entrypoint: npx prettier
然后您可以运行
docker-compose run --rm prettier <options>