[英]Use global npm package instead of installing it again
当我们运行npm i
时,有什么方法可以使用全局安装的包而不是安装相同的包。 我有以下上下文:我已经创建了一个已经安装了一个包的 docker 镜像(Dockerfile 中的 install 语句)。 当我使用具有 javascript 项目的 volumen 运行容器并运行npm i
时,似乎再次安装了包。
是否可以使用全局包而不是再次安装它?
如果你不想在 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 中即可。
经过研究,似乎以下代码解决了我的问题
WORKDIR /dir
RUN npm install package
RUN npm cache add package
RUN rm -rf *
WORKDIR /
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.