/plum

Demo server environment by node

Primary LanguageJavaScript

#Plum

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

##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执行

  • MIME: 需要支持的文件类型

      {
        "port": 80,
          "dirIndex": ["index.html", ..],
          "servers": {
            "a.tbcdn.cn": {
              "path": "/Users/eward/assets",
              "hooks": {
                ".css": ["proxy"], 
                ...
              }
            },
            ...
          },
          "hooks": {
            ".php" : ["php"],
            ".css" : ["less"]
          },
          "MIME": {
            ".js": "application/x-javascript",
            ...
          }
      }
    

##hooks

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

  • origin

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

  • hookhook-simple

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

  • less

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

  • proxy

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

  • 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

  • [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文件,方便修改
    • 增加自动更新提示

##TODO

  • php使用php-cgi和fpm来执行。对fpm和php-cgi不是很了解,学习中。
  • vm模板解析