Docker中的打字稿:Visual Studio代码宿主打字稿编译器中的“找不到模块”

时间:2020-03-16 02:21:15

标签: typescript docker visual-studio-code

项目设置

我有一个正在本地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 ,现在我的编辑器可以使用更漂亮了。

问题

在我的编辑器中,当打字稿编译器运行时,它向我显示“找不到模块”错误:

cannot find module errors in visual studio code

我的理解是,发生这种情况是因为这些模块不在磁盘上。这是由于我的上述设置。我已经使node_modules包含我的非开发依赖项,例如React,仅在容器内部可用。

我的问题

我是Docker的新手,我的理解是,在容器内做事情(包括开发)通常是件好事。我试图避免在主机中使用npm install,因为我实际上并不需要主机中的所有依赖项。我也不想在添加新的依赖项时两次npm install,一次在主机上,一次在容器中。

如果不存在导入的node_modules,是否有办法阻止Typescript错误(例如,仅加载它们的键入定义,可以吗?),有办法在Visual中指向Typescript的编译器Studio代码以某种方式添加到容器中,这样它就可以看到它们而不必将它们安装在主机上,同时仍然可以让我在主机上安装其他依赖项,例如更漂亮?

还是在主机上访问npm install的唯一方法?

1 个答案:

答案 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>