我用 Express.js 封装了一个服务器容器小工具

背景

我们都知道利用 Node.js 可以非常轻易的就编写一个 Web Server。在没有利用集成 Gulp, Webpack,Web Server 等等脚手架工具前,在做一些简单的 Web 应用的时候,我通常的做法是:用 Express.js 封装好一个 Server.js 文件集成到项目中去,以便于开发和测试。例如通过二维码扫描 Chrome 的开发程序到手机端测试,例如需要跨域调用远程服务器 API, 例如 Ajax 异步加载,等等。当然,偶尔也会用用 Nginx 做测试开发环境,但是 Nginx 这玩意还是感觉太重,并且项目组的有些同学觉得安装麻烦,配置复杂,不易上手。

由于我们经常会收到一些活动页面,或者很少页面的开发需求,移动端,PC 端都有,所以如果每次都大张旗鼓的上脚手架,全家桶实在上有点杀鸡用牛刀的感觉。一堆依赖,每次重复的安装,很占用硬盘空间。正因如此,我便希望把现有的基于 Express.js 的 server 给封装成全局的程序,每次在这些小项目需要的时候,直接一个简单的命令行就可以进行开发和测试,要安装简单,轻便,配置简单。于是这个叫cup的工具就诞生了。

特点

  1. 随时随地针对项目目录开启 Server 服务
  2. 全局安装,简单的 CLI
  3. 支持自定义服务器端口
  4. 支持远程服务器代理(Proxy)

基本使用

安装

npm install -g mini-cup

示例

| - test
 | - css
 | - styles
 | - index.html

例如当你有个项目简单到只有以上一些文件和文件夹时,需要添加 server 容器来调试开发,你只需要在控制台切换到test项目所在目录,运行:

cup run test

cup默认开启的服务器端口是3000,如果端口占用,或者需要指定其他端口的情况下,则可以通过如下命令:

cup run test -p 8080

通过选项参数-p指定端口为8080

其他

cup // 默认为命令行当前目录添加server服务

使用自定义配置文件

当我们的项目中需要跨域调用远程接口时,我们可以给项目添加一个名叫config.cup.json的简单JSON配置文件,指定服务器地址和代理地址,然后运行命令行即可,如下:

项目目录

| - test
 | - css
 | - styles
 | - index.html
 | - config.cup.json

config.cup.json 配置

{
    "name": "test",
    "listen": 8080,
    "root": "./",
    "location": {
        "/test/*": "./index.html",
        "/login": "./index.html"
    },
    "proxyTable": {
        "/api": {
            "target": "http://test.api.com",
            "changeOrigin": true
        }
    }
}

参数说明

  • name - 项目名称
  • listen - 监听端口
  • root - 根目录
  • location - 指定请求路径返回到指定页面
  • proxyTable - 代理设置
location

如果你现在正在开发一个单页应用,例如使用了 React.js 和 React-Router 的 browserHistory 技术,发现全局刷新页面,路由无法正确解析到指定页面时,便可以通过设置location参数,指定请求路由到指定页面即可

proxyTable
"/api": { // 代理所有api为根路径的请求地址
    "target": "http://test.api.com", // 代理目标服务器地址
    "changeOrigin": true // 是否改变origin
}

运行

通过添加配置的项目,运行 server 只需要如下命令:

$ cup config
或者
$ cup -c

最后

由于这个小工具是在我现有工作环境下的一个产物,所以使用场景肯定是有限的,我也只是想用它解决些小问题。当然我也知道 Github 上肯定有很多类似的工具,但是我就是不去看!!看了我就不会自己动手了~

最后,如果这个小玩意能帮你的话,欢迎交流,使用和 star~

项目地址:https://github.com/wewoor/cup

原文地址:http://imziv.com/blog/article/read.htm?id=83


最后修改于 2017-02-28