泛微Ecology 9代码块开发框架:初步实现

目标

开发框架的初版仅实现以下最基本的特性:

技术选型

实现

1. 版本管理

建立Git仓库。

业务上各个功能独立演进,因此不做版本号管理。

2. 规范化目录结构

在src/中,流程布局/、建模布局/、建模查询/这3个子目录是固定的,因为OA系统中只有这3个地方可以写代码块。但它们下面的目录结构是不固定的,上述结构只是一个参考,具体要按实际情况合理划分。

为了方便叙述,我们做如下定义:

3. 基本构建功能

模板

template.js:封装jQuery.ready回调(OA系统给的规范)、作用域隔离(通过IIFE(立即调用函数表达式)实现)、设置CSS等基础代码,并预留CSS和JS的占位符。代码如下:

jQuery(document).ready(function () {
    // 设置CSS
    (function () {
        let css = `/*[[CSS]]*/`;
        css = css.trim();
        if (css) {
            let style = document.createElement("style");
            style.innerHTML = css;
            document.head.append(style);
        }
    })();

    // 执行JS
    (function () {
        /*[[JS]]*/
    })();
});

构建程序

index.js(构建程序):

  1. 删除dist/。
  2. 递归遍历src/中的每个目录,如果目录中有index.js,则为脚本目录,需要构建。
    1. 读取index.js,得到JS代码。
    2. 如果index.css存在,则读取之,得到CSS代码,否则CSS代码为空。
    3. 读取template.js,得到模板代码。
    4. 用JS代码、CSS代码分别替换模板代码中的JS占位符、CSS占位符,得到脚本文件代码。
    5. 根据src/A/B/C/→dist/A/B/C.js的对应规则,得到脚本文件的路径。
    6. 将脚本文件代码输出为脚本文件。

启动命令

在package.json中配置:

"scripts": {
    "build": "node index.js"
}

那么,在编写完业务代码后,就可以运行如下命令将整个src/构建为dist/:

npm run build

4. 通过Web访问

使用nginx做静态Web服务器,配置如下:

server {
    listen 8000;
    server_name localhost;
    root "<项目目录>/dist";
    charset utf-8;
}

启动nginx后,即可通过形如http://localhost:8000/流程布局/流程名称/功能名称.js的URL访问脚本文件。