roa*_*ner 5 npm docker dockerfile npm-install alpine-linux
我有一个 dockerfile,其中使用 alpine-nodejs 版本 16 作为基础映像。npm 版本是 8。
npm install --production当执行的步骤时docker build,它还会安装 package.json 的 dev-dependencies 下列出的依赖项,这与生产标志的用例相反。我也用过npm install --only=production,但似乎也不起作用。
在 alpine nodejs 版本 14 中,该标志按预期工作,并且开发依赖项未安装在容器中。alpine 节点版本 16 镜像有问题吗?谢谢。
经过几周的努力,我终于找到了根本原因,我真的很愚蠢,没有注意到这一点,我不想让其他人犯同样的错误。由于该代码是专有的,因此我无法共享它。但我会解释一下这个问题。
的图像nodejs:16使用npm8.0,而 的图像nodejs:14使用npm<8.0 的版本。
它们之间的区别在于版本 8.0,npm还将安装peerDependenciesblock 中列出的依赖项。(我不确定这种行为是从 npm 8.0 还是某些以前的版本开始的)
那么,为什么我认为 npm 既安装devDependencies又安装dependencies?
当我处理图像时nodejs:14,我将某些依赖项从dependencies一个块移到devDependencies另一个块。因此,当我升级到 时nodejs:16,这些依赖项又回来了。
实际上,它们返回的原因是它们被传递依赖项内部使用,该传递依赖peerDependency项列在package.json.
那么,带回家的教训是什么?
确保要删除的依赖项不会在块内直接或传递dependency使用peerDependency。
| 归档时间: |
|
| 查看次数: |
7086 次 |
| 最近记录: |