【问题标题】:How should the package-lock.json file be generated for Node.js docker apps?应该如何为 Node.js docker 应用生成 package-lock.json 文件?
【发布时间】: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 构建的一部分。
  • 在容器中运行的 npm install 会在容器中生成文件 - 将文件复制到主机以将其签入源代码控制是标准做法吗?
  • 将锁定文件检查到源代码控制中绝对是标准做法(在我使用过的每个包管理器中都有这个概念,每种语言)。

标签: node.js docker


【解决方案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。
猜你喜欢
  • 2017-11-17
  • 2017-11-16
  • 1970-01-01
  • 2018-07-09
  • 2020-05-03
  • 2019-07-18
  • 1970-01-01
  • 2022-12-07
  • 2018-08-14
相关资源
最近更新 更多