# nodejs-proxy
**Repository Path**: hyjiacan/nodejs-proxy
## Basic Information
- **Project Name**: nodejs-proxy
- **Description**: 局域网内代理外部的 NodeJS 相关二进制文件,解决离线环境无法下载 nvm、Electron、ChromeDriver 等工具的问题
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-07-16
- **Last Updated**: 2025-08-13
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Node 工具代理配置完整说明文档(含部署章节)
本文档详细介绍如何配置和部署 Node 工具代理服务,以加速各类 Node 相关工具的依赖下载。
## 一、代理路径与目标镜像映射表
以下是完整的代理路径与 npmmirror 镜像源的对应关系,所有路径均经过实际访问验证(有效资源路径):
| 代理路径 | 目标镜像地址 | 用途说明 |
| ------------------------------- | --------------------------------------------------- | ----------------------------------------------------- |
| `/proxy/npm/` | `https://registry.npmmirror.com/` | npm 包 registry 镜像(用于 npm/yarn/pnpm 等包管理器) |
| `/proxy/node_mirror/` | `https://npmmirror.com/mirrors/node/` | Node.js 安装包镜像(用于 nvm 等版本管理工具) |
| `/proxy/node_binary/` | `https://registry.npmmirror.com/-/binary/node/` | Node.js 二进制文件镜像(用于 n 等版本管理工具) |
| `/proxy/electron_mirror/` | `https://npmmirror.com/mirrors/electron/` | Electron 框架二进制文件镜像 |
| `/proxy/chromedriver_mirror/` | `https://npmmirror.com/mirrors/chromedriver/` | ChromeDriver 浏览器驱动镜像 |
| `/proxy/geckodriver_mirror/` | `https://npmmirror.com/mirrors/geckodriver/` | GeckoDriver(Firefox 驱动)镜像 |
| `/proxy/selenium_mirror/` | `https://npmmirror.com/mirrors/selenium/` | Selenium 自动化测试工具镜像 |
| `/proxy/puppeteer_mirror/` | `https://npmmirror.com/mirrors/puppeteer/` | Puppeteer 依赖(Chromium)镜像 |
| `/proxy/node_gyp_mirror/` | `https://registry.npmmirror.com/-/binary/node-gyp/` | node-gyp 原生模块编译工具镜像 |
| `/proxy/ffmpeg_mirror/` | `https://cdn.npmmirror.com/binaries/ffmpeg/` | FFmpeg 音视频处理工具镜像 |
| `/proxy/ffprobe_mirror/` | `https://cdn.npmmirror.com/binaries/ffprobe/` | FFprobe 媒体分析工具镜像 |
| `/proxy/edgedriver_mirror/` | `https://npmmirror.com/mirrors/edgedriver/` | EdgeDriver(Edge 浏览器驱动)镜像 |
| `/proxy/operadriver_mirror/` | `https://npmmirror.com/mirrors/operadriver/` | OperaDriver(Opera 浏览器驱动)镜像 |
| `/proxy/iedriverserver_mirror/` | `https://npmmirror.com/mirrors/iedriverserver/` | IEDriverServer(IE 浏览器驱动)镜像 |
| `/proxy/volta_mirror/` | `https://npmmirror.com/mirrors/volta/` | Volta 版本管理工具镜像 |
## 二、包管理器配置(npm/yarn/pnpm)
包管理器主要用于下载 Node 依赖包,核心是将 registry 指向 `/proxy/npm/` 代理路径。
### 2.1 npm 配置
```bash
# 设置全局 registry
npm config set registry http://localhost:4757/proxy/npm/
# 验证配置
npm config get registry # 输出应包含上述代理路径
```
### 2.2 yarn 配置
```bash
# 设置 registry
yarn config set registry http://localhost:4757/proxy/npm/
# 验证
yarn config get registry
```
### 2.3 pnpm 配置
```bash
# 设置 registry
pnpm config set registry http://localhost:4757/proxy/npm/
# 验证
pnpm config get registry
```
## 三、Node 版本管理工具配置
用于管理多版本 Node.js 的工具(如 nvm、n、Volta),需配置对应镜像路径以加速安装。
### 3.1 nvm(Node Version Manager)
nvm 下载 Node 安装包时,需指向 `/proxy/node_mirror/`:
```bash
# 临时生效(单次安装)
NVM_NODEJS_ORG_MIRROR=http://localhost:4757/proxy/node_mirror/ nvm install <版本号>
# 永久生效(添加到 ~/.bashrc 或 ~/.zshrc)
export NVM_NODEJS_ORG_MIRROR=http://localhost:4757/proxy/node_mirror/
source ~/.bashrc # 生效配置
```
### 3.2 n(轻量 Node 版本管理工具)
n 工具依赖 `/proxy/node_binary/` 路径:
```bash
# 临时安装
N_NODE_MIRROR=http://localhost:4757/proxy/node_binary/ n install <版本号>
# 永久生效(添加到环境变量配置文件)
export N_NODE_MIRROR=http://localhost:4757/proxy/node_binary/
```
### 3.3 Volta
Volta 安装和切换版本时,需指向 `/proxy/volta_mirror/`:
```bash
# 安装 Volta 时指定镜像(Linux/macOS)
curl https://get.volta.sh | VOLTA_DOWNLOAD_ROOT=http://localhost:4757/proxy/volta_mirror/ bash
# 验证镜像是否生效
volta install node@18 # 观察下载地址是否包含代理路径
```
## 四、原生模块编译工具配置(node-gyp)
node-gyp 用于编译 C++ 编写的 Node 原生模块,需配置其二进制镜像:
```bash
# 方式1:通过环境变量临时生效
export node_gyp_mirror=http://localhost:4757/proxy/node_gyp_mirror/
npm install <需要编译的模块> # 如 node-sass、sqlite3 等
# 方式2:项目级配置(在项目根目录 .npmrc 中添加)
node_gyp_mirror=http://localhost:4757/proxy/node_gyp_mirror/
```
## 五、浏览器驱动与自动化工具配置
自动化测试工具(如 Selenium)依赖的浏览器驱动(Chromedriver、Edgedriver 等),需单独配置镜像。
### 5.1 常见浏览器驱动配置
| 驱动工具 | 环境变量名 | 代理路径配置 |
| -------------- | --------------------- | ---------------------------------------------------- |
| Chromedriver | CHROMEDRIVER_CDNURL | |
| GeckoDriver | GECKODRIVER_CDNURL | |
| EdgeDriver | EDGEDRIVER_CDNURL | |
| OperaDriver | OPERADRIVER_CDNURL | |
| IEDriverServer | IEDRIVERSERVER_CDNURL | |
**配置示例**(以 Chromedriver 为例):
```bash
# 临时安装 chromedriver 包
CHROMEDRIVER_CDNURL=http://localhost:4757/proxy/chromedriver_mirror/ npm install chromedriver
# 永久生效(添加到环境变量)
export CHROMEDRIVER_CDNURL=http://localhost:4757/proxy/chromedriver_mirror/
```
### 5.2 Selenium
Selenium 工具包下载需指向 `/proxy/selenium_mirror/`:
```bash
# 临时安装
SELENIUM_CDNURL=http://localhost:4757/proxy/selenium_mirror/ npm install selenium-webdriver
# 永久生效
export SELENIUM_CDNURL=http://localhost:4757/proxy/selenium_mirror/
```
## 六、前端框架与工具配置
部分框架(如 Electron)和工具(如 Puppeteer)需下载额外二进制资源,需单独配置。
### 6.1 Electron
Electron 框架二进制文件通过 `/proxy/electron_mirror/` 获取:
```bash
# 临时安装
ELECTRON_MIRROR=http://localhost:4757/proxy/electron_mirror/ npm install electron
# 永久生效
export ELECTRON_MIRROR=http://localhost:4757/proxy/electron_mirror/
```
### 6.2 Puppeteer
Puppeteer 依赖的 Chromium 浏览器需指向 `/proxy/puppeteer_mirror/`:
```bash
# 临时安装
PUPPETEER_DOWNLOAD_BASE_URL=http://localhost:4757/proxy/puppeteer_mirror/ npm install puppeteer
# 永久生效
export PUPPETEER_DOWNLOAD_BASE_URL=http://localhost:4757/proxy/puppeteer_mirror/
```
## 七、音视频工具配置(FFmpeg/FFprobe)
FFmpeg 和 FFprobe 用于音视频处理,需配置对应代理路径:
```bash
# FFmpeg 配置
export FFMPEG_BINARIES_URL=http://localhost:4757/proxy/ffmpeg_mirror/
# FFprobe 配置
export FFPROBE_BINARIES_URL=http://localhost:4757/proxy/ffprobe_mirror/
# 安装依赖包时生效(以 ffmpeg-static 为例)
npm install ffmpeg-static # 会自动从上述代理路径下载
```
## 八、项目级配置(推荐)
为避免全局配置影响其他项目,可在项目根目录创建 `.npmrc` 文件,集中管理代理:
```ini
# .npmrc 示例
registry=http://localhost:4757/proxy/npm/
node_gyp_mirror=http://localhost:4757/proxy/node_gyp_mirror/
electron_mirror=http://localhost:4757/proxy/electron_mirror/
puppeteer_download_base_url=http://localhost:4757/proxy/puppeteer_mirror/
chromedriver_cdnurl=http://localhost:4757/proxy/chromedriver_mirror/
ffmpeg_binaries_url=http://localhost:4757/proxy/ffmpeg_mirror/
```
## 九、部署章节
### 1. 服务部署说明
本代理服务基于 Python 实现,默认监听 **4757 端口**,支持以下部署方式:
#### 1.1 环境准备
```bash
# 创建Python虚拟环境
python -m venv venv
# 激活虚拟环境
# Windows:
venv\Scripts\activate.bat
# Linux/macOS:
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
```
#### 1.2 直接运行(开发环境)
```bash
python main.py
```
### 2. 配置文件详解
```yaml
# 代理路径映射配置
proxy_mirrors:
# 代理路径: 目标镜像URL
"/proxy/npm/": "https://registry.npmmirror.com/"
"/proxy/node_mirror/": "https://npmmirror.com/mirrors/node/"
"/proxy/node_binary/": "https://registry.npmmirror.com/-/binary/node/"
"/proxy/electron_mirror/": "https://npmmirror.com/mirrors/electron/"
"/proxy/chromedriver_mirror/": "https://npmmirror.com/mirrors/chromedriver/"
"/proxy/geckodriver_mirror/": "https://npmmirror.com/mirrors/geckodriver/"
"/proxy/selenium_mirror/": "https://npmmirror.com/mirrors/selenium/"
"/proxy/puppeteer_mirror/": "https://npmmirror.com/mirrors/puppeteer/"
"/proxy/node_gyp_mirror/": "https://registry.npmmirror.com/-/binary/node-gyp/"
"/proxy/ffmpeg_mirror/": "https://cdn.npmmirror.com/binaries/ffmpeg/"
"/proxy/ffprobe_mirror/": "https://cdn.npmmirror.com/binaries/ffprobe/"
"/proxy/edgedriver_mirror/": "https://npmmirror.com/mirrors/edgedriver/"
"/proxy/operadriver_mirror/": "https://npmmirror.com/mirrors/operadriver/"
"/proxy/iedriverserver_mirror/": "https://npmmirror.com/mirrors/iedriverserver/"
"/proxy/volta_mirror/": "https://npmmirror.com/mirrors/volta/"
# 服务器配置
server:
# 监听所有网络接口
host: "0.0.0.0"
port: 4757
timeouts:
# 连接超时(秒)
connect: 30
# 总读取超时(秒)
read: 300
# 无数据超时(秒)
no_data: 60
chunk_size: 8192
# 最大并发连接数
max_connections: 100
user_agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
# 日志配置
log:
# 日志目录
directory: "./logs"
# 日志级别: DEBUG/INFO/WARNING/ERROR/CRITICAL
level: "INFO"
# 保留天数
retention_days: 7
# 缓存配置
cache:
# 是否启用缓存
enabled: true
# 缓存根目录
directory: "./cache"
```
### 3. 客户端配置注意事项
所有工具配置中的 `http://localhost:4757` 需替换为实际部署地址:
- **本地部署**:`http://localhost:4757`
- **远程服务器部署**:`http://服务器IP:4757` 或 `http://域名:4757`
例如,npm 配置示例:
```bash
npm config set registry http://localhost:4757/proxy/npm/
```
## 十、注意事项
1. **代理服务地址替换**:所有配置中的 `http://localhost:4757` 需替换为实际代理服务地址(如公司内部代理 `http://proxy.example.com:8080`)。
2. **路径有效性验证**:若配置后下载失败,可通过浏览器访问 `目标镜像地址`(如 `https://npmmirror.com/mirrors/electron/`)确认资源是否存在,部分工具可能因版本更新调整路径。
3. **环境变量优先级**:临时环境变量 > 项目级配置(.npmrc)> 全局配置,可根据需求灵活选择。
4. **工具版本兼容**:部分旧工具可能不支持代理配置,建议升级到最新稳定版(如 npm ≥ 6.x、yarn ≥ 1.22.x)。