gpt4 book ai didi

visual-studio-code - 为什么将 node_modules 移动到父目录

转载 作者:行者123 更新时间:2023-12-04 11:25:03 25 4
gpt4 key购买 nike

在 Visual Studio Code 的 Docker 扩展中,在 Node.js Dockerfile 模板中,node_modules 目录移动到父目录,在 this line 中。 :

RUN npm install --production --silent && mv node_modules ../
mv node_modules ../对我来说看起来没用。
有理由这样做吗?

最佳答案

更新: found a good explanation的“为什么”。请参阅:处理节点模块部分。
TLDR; 让您可以在容器内外运行应用程序,而不必担心 node_modules 中特定于操作系统的项目将无法在主机和容器之间运行。
原始(如评论中指出的错误)答案:
这是为了利用 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 中的每一行。被执行。
那么我们在上面snipped中所说的是:
  • 运行 apt-get并将图层提交到缓存
  • 接下来,复制 package.json文件从主机到容器,提交层
  • 运行 npm install ,然后移动 node_modules文件夹上一层,npm将递归向上搜索,直到找到 node_modules folder ,所以你的应用不会在意。提交这一层。
  • 将包含在当前文件夹中的源代码复制到容器中,提交此层
  • 最后,当你的容器运行时,使用命令 node index.js

  • 这个系统的美妙之处在于,Docker 只会从自上次构建容器以来发生变化的地方重新构建容器。所以在我们的例子中,它只会运行 npm install…如果前一层有变化,比如更新 package.json .如果没有,那么它不会执行 npm install命令,即使说, index.js可能已经改变了。
    当然,请记住你应该有 node_modules在您的 .dockerignore 中列出文件,以便 COPY . .不试图捡起来。

    关于visual-studio-code - 为什么将 node_modules 移动到父目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198947/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com