plum

Demo server environment by node

Usage no npm install needed!

<script type="module">
  import plum from 'https://cdn.skypack.dev/plum';
</script>

README

Plum

基于node的Demo服务器。Node作为http请求控制中心,通过server.json配置,根据请求 域名,找到所请求的文件,同时根据服务器配置的hook,对文件执行解析分发。

doc

Use

  sudo npm install plum -g
  sudo plum

依赖php cli和node的less模块,请首先安装。

config

配置文件: server.json。配置方式和Apache基本一直,不过没有那么复杂。

  • port: 端口,默认80
  • dirIndex: 目录中默认查找文件
  • servers: 虚拟主机相关配置,包括域名对应的base路径和特定hooks
  • hooks: 全局hook,比如.php: php,所有的php文件都会通过hooks/php.js执行

hooks

文档。 server.js是入口文件,完成请求分发工作。主要解析过程由hooks目录下的js执行。

  • webx [from 0.4.2]

    webx规则,使用规则请看issue 11

  • velocity [from 0.4.1], 使用velocity模板解析。

  • agent 请求转发到另外域名,配置如下

    "tms.taobao.com": {
      "customs": {"host": "110.75.19.81", "port": 80},
      "hooks" : { "*" : ["agent"] }
    }
  • origin

    origin首先判断请求为文件还是目录,如果是目录,生成目录列表。如果是文件,根据文 件后缀,初始化相对于的hook,并且接受hook发送数据请求事件。控制文件输出到客户端 的属性,和错误情况的处理。同时,在没有hook的情况下,完成静态文件读取的功能。

  • hookhook-simple

    这两个是hook规范事例,并没有具体实现,是扩展hook的规范

  • less

    less完成less解析工作,初始化时,判断文件相对应的less文件是否存在,如果存在执行 less编译,返回结果,如果不存在,退出,交给origin处理。

  • proxyAll 对所有的文件都转发到服务器端取文件,淘宝静态资源代理规则。

  • proxy

    淘宝cdn代理实现。初始化时候,首先判断文件在本地是否存在(文件查找规则由请求url 和 server.json配置的path决定),如果不存在,从cdn服务器获取数据。如果存在,则退 出,origin处理自动。

  • php/proxy 启动php自带的server,需要php v5.4.x,完整支持post、get请求

  • php/cli

    通过php cli解析php文件,现在还不支持post和get请求,作为demo环境基本够用,执行 效率和由php 自身性能决定,和转发者是node还是apache无关。

  • php/tms

    模拟tms函数,生成demo。判断规则是:文件是php,并且含有.tms,tms规则支持tms文件 引用,不过要求,每次只引用一个文件(<?php include 'a.tms.php';?>),而且文件名 中含有.tms。demo的数据根据请求的文件名,把后缀改为json,比如访问a.tms.php,demo 数据源为a.tms.json,运行时,每个函数通过name来定位数据。

change log

  • version 0.3.10

    • 修复两个斜杠开头时代理错误的bug
  • [2012-11-14 11:40:24] version 0.3.9

    • 简化log判断,改为两条log输出规则,log和debug,log使用支持通配符*,匹配需要 输出log信息的url。debug打开所有的log信息
    • 修复bug #9
    • 增加agent钩子,用于完全代理任意域名
  • [2012-08-09 08:44:24] version 0.3.1

    • 增加log信息过滤配置,logFiles配置可显示log信息的文件,logHooks配置hook日志, logBasic显示基本信息,显示所有请求文件和请求执行时间. debug所有细节都log到 控制台。
  "logFiles":[
    {
      "path":"tmse/5137/assets",
      "ext":[".css", ".js"]
    }
  ],
  "logHooks":["less"],
  "logBasic":false,
  "debug":false
  • 增加执行时配置,使用config进行执行时配置,无需重启 服务器。
  • 修改hook php/proxy,使用php5.4启动php内置服务器,请求转发到php自带服务器, 支持post,get请求。需要php版本>=5.4
  • 增加hook proxyAllstatics,proxyAll对所有请求都从a.tbcdn.cn上取数据, statics为静态文件hook,本来和origin.js和在一起,现在拆分开。
  • 增加子规则maps配置,用于设置域名下路径映射和hook规则
  "maps":{
    "/tmse/5137/assets/":{
      "path":"/Users/eward/Sites/dev/nongye/sdk/assets/",
      "hooks":{
        ".css":["less"],
        "statics":["statics"]
      }
    }
  }
  • [2012-06-12 15:44:03]
    • 增加proxy=pre作为使用预发assets的接口
    • tms规则下,build时,生成文件名对应的html文件,用于fed上预览
    • 去除tms规则下,引用模块文件名必须以.tms.php结尾的规则
    • tms规则下,自动生成.json文件,方便修改
    • 增加自动更新提示