wangyuelucky / ExtMerge

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

ExtJS4 项目,按角色和依赖关系合并文件

ExtJS官方的文件合并方案是,整个项目合并成一个方案。对于,具有多角色的系统是不合适的。

用户A拥有R1角色,登录系统后没有必要加载无关角色的代码文件。

项目说明

  1. 根据Ext类的定义规则和关键字,分析每一个类文件的依赖关系
  2. 根据第一步得到的直接依赖关系,递归搜索所有的间接依赖关系
  3. 数据库表 User - Role - Menu 多对多关系。Menu结构<name,url>,其中name是菜单名称,url是Controller类名+方法名
  4. 页面上Menu即是,当用户登录之后,根据用户-角色-菜单关系,动态查询并渲染到页面
  5. 在系统发布前,采用预编译的方式,查询数据库Role - Menu,并搜索每一个菜单对应的Controller文件的关系,从而得到每一个角色需要的所有类文件。
  6. 把同一角色的文件合并到一个文件中。
  7. 用户实时行为 - 系统配置 - 页面元素 - 源码类文件,之间产生联系。

使用说明

  1. 首先,启动数据库服务
  2. 运行模式。切换到当前目录,然后在命令行中运行命令node main.js test
  3. 调试模式。在命令行中运行node-inspector,然后在新的命令行中运行node --debug-brk=5858 main.js test

TODOS

  1. 文件之间的依赖关系散落到各个文件内部,对于文件的替换、目录的变更是个麻烦事儿。 是否应该考虑全局的配置,类似spring Context文件或者H5的manifest文件?
  2. 目前只能解决类文件之间的静态关系(硬编码),对于动态关系还束手无策。
  3. 查询依赖关系采用esprima简单粗暴,效率低。
  4. 到目前为止实现了按角色合并成一个文件。应该按照子文件和主文件的依赖强弱来决策提前加载还是懒加载。
  5. 公共模块的查询现在是直接指定入口类,更合理的方式是根据依赖关系分析提取。
  6. 开发的时候,每个文件显示的声明依赖关系,并且用create + 别名的方式创建类。 在合并的时候,首先判断当前文件是否需要合并。是的话,去掉依赖声明,并且用new + 类名的方式创建类。
  7. 本项目采用的是按角色合并文件,是不是按模块(或者菜单)划分更合理?
  8. 既然已经缩小到具体用户了,是否可以结合用户的历史行为统计信息,来制定合并方案?

文件说明

  1. db文件夹,数据库连接相关,包含了数据库文件
  2. lib文件夹,工具类库
  3. models文件夹,数据库操作类
  4. node_modules文件夹,插件
  5. test,目标测试项目源文件
  6. main.js入口主函数;findDirectDependence.js查询依赖关系;parse.js分析类文件结构,提取依赖关系; searchMenuByRole.js查询数据库,得到每个角色的所有菜单(结果放到Admin.txt、VODC.txt、VTC.txt)。
  7. dependence.txt直接依赖关系;deepDependence.txt包含间接依赖关系。
  8. AdminMini.js、VODCMini.js、VTCMini.js、commonMini.js分别是三个角色的文件和公共文件。

第三方工具说明

  1. 基于Node
  2. 用esprima构造每个类文件的语法树
  3. 用uglify-js压缩文件
  4. 调试采用node-inspector插件
  5. 数据库mongodb

About


Languages

Language:JavaScript 97.5%Language:HTML 1.9%Language:CSS 0.6%Language:Shell 0.0%