在 Docker 中配置 npm 和 pnpm 使用镜像源

在 Docker 中配置 npm 和 pnpm 使用镜像源

在 Docker 中构建前端应用时,使用 npm 或 pnpm 安装依赖是必不可少的步骤。然而,由于网络环境的限制,直接访问官方的 npm 源可能会非常缓慢甚至失败。为了解决这个问题,我们可以配置 npm 和 pnpm 使用国内的淘宝镜像源。本篇博客将介绍如何在 Dockerfile 中正确配置这些包管理工具以使用镜像源,从而加快依赖的安装速度。

1. 配置 npm 使用镜像源

你可以在 Dockerfile 中通过几种方式来让 npm 使用镜像源。最常见的方法:

直接在 npm install 命令中指定镜像源

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 使用淘宝镜像源安装 npm 依赖
RUN npm install --registry=https://registry.npmmirror.com/

可以通过设置环境变量的方式来配置 npm 使用镜像源

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 设置 npm registry 环境变量
ENV NPM_CONFIG_REGISTRY=https://registry.npmmirror.com/

# 复制项目文件
COPY . .

# 安装依赖
RUN npm install

2. 配置 pnpm 使用镜像源

同样是两种常见操作

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 设置 pnpm 的 registry 镜像源
RUN pnpm config set registry https://registry.npmmirror.com/

# 复制项目文件
COPY . .

# 安装依赖
RUN pnpm install

直接在执行 pnpm install 时指定镜像源。

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 使用淘宝镜像源安装 pnpm 依赖
RUN pnpm install --registry=https://registry.npmmirror.com/

重点:强制使用代理

上面命令中直接代理有时候仍然发现请求失败,看地址还是使用了非镜像地址使用,我们要额外选项优化 pnpm 安装

在某些情况下,即使指定了镜像源,pnpm 仍然可能访问 nodejs.org,这是由于锁定文件或缓存的影响。你可以使用以下命令来优化 pnpm 的安装过程:

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 复制项目文件
COPY . .

# 使用淘宝镜像源,并禁用锁定文件的冻结检查和优先使用本地缓存
RUN pnpm install --registry=https://registry.npmmirror.com --no-frozen-lockfile --prefer-offline
  • --no-frozen-lockfile: 允许 pnpm 重新解析依赖关系,不严格依赖 pnpm-lock.yaml 文件中的版本和源。
  • --prefer-offline: 优先使用本地缓存中的包,减少对外部网络的依赖。

至此应该就没有问题了,如果强解锁lock文件还不行,那最后强制 npm 和 pnpm 使用代理服务器

如果你需要绕过网络限制,可以通过设置代理服务器的方式来强制 npm 和 pnpm 请求通过代理。

Dockerfile 复制代码
# 使用官方 Node.js 镜像
FROM node:16

# 设置工作目录
WORKDIR /app

# 设置代理环境变量
ENV HTTP_PROXY=http://your-proxy-server:port
ENV HTTPS_PROXY=http://your-proxy-server:port

# 复制项目文件
COPY . .

# 安装依赖
RUN npm install
# 或者
RUN pnpm install

结论

在 Docker 中构建 Node.js 应用时,配置 npm 和 pnpm 使用国内的镜像源,可以显著提高依赖安装的速度和稳定性。因为一些未知原因,我们也必须要做这些多余的操作。

通过这些配置,你将能够在网络环境受限的情况下,依然快速、高效地构建你的前端应用。希望这篇博客能为你提供实用的指导,如果你有更多问题或建议,欢迎在评论区分享!

相关推荐
ejinxian3 小时前
Linux 虚拟化技术 KVM/ESXI/Docker
linux·运维·docker·qemu·openvz
lxmyzzs4 小时前
vscode-ssh无法进入docker问题解决
vscode·docker·ssh
Candice_jy4 小时前
vscode运行ipynb文件:使用docker中的虚拟环境
服务器·ide·vscode·python·docker·容器·编辑器
roman_日积跬步-终至千里6 小时前
【Docker下部署高可用】StarRocks 存算一体架构高可用部署要点
docker·容器·架构
醉卧雕龙舫 、17 小时前
七.Docker网络
docker
小坏讲微服务18 小时前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
Aimyon_3618 小时前
MinerU Docker自定义版本部署
运维·docker·容器
梁正雄20 小时前
19、docker跨主机网络 Overlay\Underlay
网络·docker·容器
Hover_Z_快跑1 天前
Docker 部署 Elasticsearch 8.12 + Kibana + Nginx 负载均衡
nginx·elasticsearch·docker
爱宇阳1 天前
Vue3 前端项目 Docker 容器化部署教程
前端·docker·容器