在 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 使用国内的镜像源,可以显著提高依赖安装的速度和稳定性。因为一些未知原因,我们也必须要做这些多余的操作。

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

相关推荐
Doker 多克38 分钟前
IntelliJ IDEA Docker集成
spring cloud·docker·intellij-idea
筏镜7 小时前
调整docker bridge地址冲突,通过bip调整 bridge地址
java·docker·eureka
韩俊强12 小时前
使用Docker部署一个Node.js项目
docker·容器·node.js
Steven_Mmm13 小时前
初试Docker
运维·docker·容器
Gauss松鼠会14 小时前
GaussDB 企业版轻量化部署探索(二)
数据库·人工智能·docker·华为云·gaussdb
过过过呀Glik19 小时前
在 Ubuntu 上安装与配置 Docker 的完整指南
linux·ubuntu·docker
G_whang19 小时前
centos7 下使用 Docker Compose
运维·docker·容器
大饼酥20 小时前
保姆级教程Docker部署RabbitMQ镜像
docker·容器·rabbitmq
Engineer-Yao20 小时前
【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
docker·大模型·win10·wsl·ollama·本地大模型·ragflow
黄白柴柴21 小时前
docker run 端口映射
运维·docker·容器