为什么将node_modules移动到父目录

时间:2019-01-15 12:32:31

标签: visual-studio-code node-modules

在Visual Studio Code的Docker扩展中,在Dockerfile模板中,将node_modules目录移动到父目录。我说的是this line

RUN npm install --production --silent && mv node_modules ../

为什么要这么做?

1 个答案:

答案 0 :(得分:1)

这是为了利用Docker中的缓存机制。通常,您的Dockerfile中将包含以下内容:

1. RUN apt-get #bunch of stuff you want installed
2. COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
3. RUN npm install --silent && mv node_modules ../
4. COPY . .
5. CMD node index.js

Docker在“图层”中构建其映像,您可以想到执行Dockerfile中每一行时所添加的每一层。

然后我们在上面的摘录中说的是:

  1. 运行apt-get并将层提交到缓存
  2. 接下来,将package.json文件从主机复制到容器中,提交层
  3. 运行npm install,然后将node_modules文件夹上移一个目录,npm将向上递归搜索,直到找到node_modules folder,因此您的应用将不在乎。提交此层。
  4. 将当前文件夹中包含的源代码复制到容器中,提交此层
  5. 最后,在运行容器时,使用命令node index.js

该系统的优点在于,Docker仅在自上次构建容器以来发生变化的地方重新构建容器。因此,在我们的情况下,只有上一层发生更改(例如更新的npm install…),它才会运行package.json。否则,即使npm install可能已更改,它也不会执行index.js命令。

当然,请记住,您应该在node_modules文件中列出.dockerignore,以使COPY . .不会尝试提取它。