@juleide/proxy
v1.0.0
Published
A simple local server with proxy support, similar to anywhere but with proxy configuration
Maintainers
Readme
Proxy Server
一个简单易用的本地静态服务器,支持代理配置功能,类似于 anywhere,但增加了代理配置功能。
功能特性
- 🚀 快速启动:一键启动本地静态服务器
- 🔄 代理支持:灵活的代理配置,支持路径重写
- 📁 静态文件服务:自动提供指定目录下的静态文件
- 🌐 自动端口查找:端口被占用时自动寻找可用端口
- 🖥️ 自动打开浏览器:可选自动打开浏览器访问
- ⚙️ 灵活配置:支持命令行参数和配置文件两种方式
安装
# 全局安装
npm install -g @julei/proxy
# 或本地安装
npm install @julei/proxy使用方法
基本使用
# 启动服务器(使用当前目录,默认端口5555)
proxy
# 指定目录和端口
proxy -d ./dist -p 8080
# 自动打开浏览器
proxy --open命令行参数
| 参数 | 缩写 | 说明 | 默认值 |
|------|------|------|--------|
| --dir <path> | -d | 要服务的目录 | 当前目录 . |
| --port <number> | -p | 监听端口 | 5555 |
| --proxy-config <path> | 无 | 代理配置文件路径 | proxy.config.js |
| --open | -o | 自动打开浏览器 | false |
代理配置
首次运行时,程序会提示是否生成代理配置文件。配置文件采用 Node.js 模块格式:
// proxy.config.js
module.exports = {
proxies: [
{
prefix: '/api', // 代理路径前缀
target: 'http://192.168.1.116:6010/api', // 目标服务器地址
rewrite: path => path.replace(/^\/api/, ''), // 路径重写规则
changeOrigin: true, // 是否修改请求头中的host
ws: true // 是否代理websocket
},
{
prefix: '/upload',
target: 'http://localhost:3000',
changeOrigin: true
}
],
server: {
port: 5555, // 服务器端口(可选,优先级低于命令行参数)
openBrowser: true // 是否自动打开浏览器(可选)
}
};代理配置选项说明
| 选项 | 类型 | 必填 | 说明 |
|------|------|------|------|
| prefix | string | 是 | 需要代理的路径前缀 |
| target | string | 是 | 目标服务器地址(支持 http/https)|
| rewrite | function | 否 | 路径重写函数 |
| changeOrigin | boolean | 否 | 是否修改请求的 host 头,默认 true |
| ws | boolean | 否 | 是否代理 websocket 连接,默认 true |
配置文件与命令行参数的优先级
端口配置的优先级顺序(从高到低):
- 命令行参数
-p/--port - 配置文件中的
server.port - 默认值
5555
使用场景示例
场景1:前端开发代理API请求
// proxy.config.js
module.exports = {
proxies: [
{
prefix: '/api',
target: 'http://api.example.com',
changeOrigin: true
}
],
server: {
port: 3000,
openBrowser: true
}
};# 启动服务器
proxy -d ./public场景2:多环境代理配置
// proxy.config.js
module.exports = {
proxies: [
{
prefix: '/api/v1',
target: 'https://api-v1.example.com',
changeOrigin: true
},
{
prefix: '/api/v2',
target: 'https://api-v2.example.com',
changeOrigin: true,
rewrite: path => path.replace(/^\/api\/v2/, '/v2')
},
{
prefix: '/uploads',
target: 'http://fileserver.example.com',
changeOrigin: true
}
]
};场景3:开发环境快速切换
# 开发环境
proxy -d ./src -p 8080 --open
# 生产构建测试
proxy -d ./dist -p 8080
# 自定义配置文件
proxy --proxy-config ./config/proxy.dev.js项目结构
proxy-server/
├── bin/
│ └── proxy.js # 主程序入口
├── package.json # 项目配置
└── proxy.config.js # 代理配置文件(自动生成)技术栈
- Express: 轻量级 web 框架
- http-proxy-middleware: 强大的代理中间件
- commander: 命令行参数解析
- chalk: 终端彩色输出
注意事项
- 端口占用:如果指定端口被占用,程序会自动寻找下一个可用端口
- 配置文件:首次运行时会提示生成配置文件,可按需修改
- HTTPS 代理:代理 HTTPS 目标时,会自动设置
secure: false - 路径重写:默认会移除前缀路径,可通过
rewrite函数自定义 - 静态文件:未配置代理的路径会作为静态文件处理
常见问题
Q: 如何代理到 HTTPS 服务?
A: 直接在 target 中指定 https:// 开头的地址即可,程序会自动处理。
Q: 如何保留原始路径前缀?
A: 设置 rewrite: path => path 或省略 rewrite 配置项。
Q: 如何同时代理多个 API 服务?
A: 在 proxies 数组中添加多个代理配置对象。
Q: 端口被占用怎么办? A: 程序会自动寻找下一个可用端口,并在控制台显示实际使用的端口。
许可证
MIT License
作者
julei ([email protected])
