应该如何为 Node.js docker 应用生成 package-lock.json 文件?
Posted
技术标签:
【中文标题】应该如何为 Node.js docker 应用生成 package-lock.json 文件?【英文标题】:How should the package-lock.json file be generated for Node.js docker apps? 【发布时间】:2019-02-16 12:03:27 【问题描述】:Node.js docker 教程 (https://nodejs.org/en/docs/guides/nodejs-docker-webapp/) 指定应在启动 docker 之前在主机上运行 npm install 以生成 package-lock.json 文件。
npm/node 在宿主机上不可用时如何生成这个文件?
当新的依赖项添加到 package.json 时,应该如何更新 package-lock.json?
npm 指定应该将 package-lock.json 文件签入源代码控制。当 npm install 通过 docker 运行时,它会在容器中生成 package-lock.json 文件——这不是从源代码管理中检出的地方。显而易见的解决方法是在文件更新时将文件从容器复制到主机,但这似乎应该有一个更简单的解决方案。
【问题讨论】:
Npm install 将在容器中运行,作为 docker 构建的一部分。 How do I npm update dependency versions in the package-lock.json?的可能重复 在容器中运行的 npm install 会在容器中生成文件 - 将文件复制到主机以将其签入源代码控制是标准做法吗? 将锁定文件检查到源代码控制中绝对是标准做法(在我使用过的每个包管理器中都有这个概念,每种语言)。 【参考方案1】:我通常只是创建一个临时容器来运行 npm,而不必在主机上安装 node 和 npm。像这样的:
docker run --rm -v "$(pwd)":/data -w /data -it node bash
然后在 bash 中我运行 npm init
来生成 package.json 和 npm install
来生成 package-lock.json。您可能希望使用 -u "$UID"
使文件也归您的主机用户所有,或者只是在之后将其 chown。
我在安装新软件包时做同样的事情,只是在临时容器上的 bash 中 npm install package
。
【讨论】:
您也可以尝试使用docker run --rm -v "$(pwd)":/data -w /data -it 'node:alpine' sh
来使用轻量级 alpine 而不是基于 debian 的容器。
-w 有什么作用?我似乎在文档中找不到它。
@srchulo 它为您正在运行的命令设置当前目录(在容器内)
@Paul 谢谢!我想也许就是这样,但我删除了它并且我在同一个目录中。也许那是因为我在 Dockerfile 中设置了相同的 WORKDIR。以上是关于应该如何为 Node.js docker 应用生成 package-lock.json 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Azure 上的 Node.js Api 应用启用 BLOB 日志记录?
我应该如何为 Firebase 身份验证创建新的联合身份提供程序