【问题标题】:Use global npm package instead of installing it again使用全局 npm 包而不是再次安装它
【发布时间】:2022-12-14 23:18:43
【问题描述】:

有什么方法可以使用全局安装的包而不是在我们运行npm i 时安装相同的包。 我有以下上下文: 我已经创建了一个已经安装了一个包的 docker 镜像(Dockerfile 中的 install 语句)。当我使用具有 javascript 项目的卷运行容器并运行 npm i 时,似乎再次安装了该包。

是否可以使用全局包而不是再次安装它?

【问题讨论】:

  • 我建议上市全部package.json 文件中的依赖项。在 Docker 上下文中,不要 RUN npm install individual-package,更一般地说,不要期望你的依赖项被全局安装。 (并且不要将您的代码或库树存储在卷中,它们应该内置到图像中。)

标签: javascript docker npm


【解决方案1】:

如果你不想在 docker 构建 node_modules 期间再次安装,你可以使用你的 node_modules 创建一个基础镜像。

FROM node:18-alpine3.16
WORKDIR /usr/src/app
COPY package*  ./
RUN  npm install 
docker build -t myimage .

您可以标记并将其推送到注册表(dockerhub) 或者在本地将其用作新的基础映像。

FROM myimage
WORKDIR /usr/src/app #Here are now already your node_modules
COPY . .  # copy your code inside the image, or map the folder if you are in 
          # development

RUN npm run build # if you need a build
CMD ["mycommand","myargument"]

请注意这一点,但如果添加或更新节点模块,则需要重建基础映像。

还可以考虑使用 npm ci 而不是 npm install。这样,每次重新安装节点模块时,您都可以保留相同版本的节点模块。

处理节点模块和基础镜像的安全问题。

运行docker scan myimage,定期获取您的 node_modules 或基础图像需要更新的信息。

在开发过程中,将您的代码文件夹映射到 docker 映像绝对没问题。开发时甚至不需要在映像中复制您的代码。只需在您的 WORKDIR 中点击它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2020-10-23
    • 1970-01-01
    • 2021-04-13
    • 2015-03-07
    相关资源
    最近更新 更多