nun*_*uno 7 node-modules visual-studio-code
在 Visual Studio Code 的 Docker 扩展中,在 Node.js Dockerfile 模板中,将 node_modules 目录移动到父目录,在这一行中:
RUN npm install --production --silent && mv node_modules ../
Run Code Online (Sandbox Code Playgroud)
在mv node_modules ../我看来毫无用处。有理由这样做吗?
更新: 找到了“为什么”的一个很好的解释。请参阅:处理节点模块部分。
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
Run Code Online (Sandbox Code Playgroud)
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 . .就不会试图将其取走。
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |