1.0.1 • Published 5 months ago

com.iflytek.clst.transformation v1.0.1

Weekly downloads
-
License
ISC
Repository
-
Last release
5 months ago

1.构建过程

简单构建

执行 build脚本命令 `node build.js`,产物位于dist/路径下

指定版本号构建

1. 修改build.js 脚本中的version 字段值
2. 执行node build.js 命令

2.使用方法

调用js transform(json) 函数获取标准题型json字符串
参数:待解析的非标准题型json字符串
返回: 解析后的标准题型json字符串
返回结构 :
```
{
  "code":[0或1], //int 1代表转换成功,其他代表转换失败
  "message":"transform success", //转换成功或失败的信息
  "data": json, //转换成功后的标准 题型结构。
}
```

三端(Android/iOS/Web集成方案)

Android:WebView、Google V8(J2V8)、Rhino、JsCore等,推荐用J2V8执行js脚本

iOS:在iOS7 提供了原生JavaScriptCore Api 用来执行js脚本

Web/小程序: 略

3.开发规范

需要新曾题型的转换需求时,要遵循以下开发规范:

1. 命名规范-强制:每个题型对应一个名为[题型编码]_transformer 转换类(比如xk题型对应的转换类名为xk_transformer)。

2. 转换逻辑需要实现在名为transform(json) 函数中:入参为需要转换的题型json数据,返回
转换后的标准题型json结构。如果需要解析其他题型,可以通过调用
function getTransformer(code)函数获取对应的解析器进行解析(注意,当SDK库中没有code对应的解析器时,调用该函数会返回null)。

3.transform类的构造函数必须是无参的


附加说明

项目的目的是方便快速开发题型转换脚本并部署共享,对项目结构的要求是结构简单,无需复杂框架;对构建方法的要求是简单快速;对构建产物的要求是轻量。因此在选型构建方案时,pass掉了webpack以及rollup,使用仅引入Terser插件对js脚本文件合并压缩与混淆。

1.项目结构

dist      --构建产物目录
src       --js脚本目录
build.js  --构建脚本
README.md --项目说明文档

2.新增题型自动注册原理

  1. 维护一个全部map用于保存所有转换器

  2. 打包时遍历src 路径下的所有js类,找到以"_transformer"结尾的类,生成transformer对象并保存到map中。

  3. 将map 追加到合并的js中间产物,最后交给Terser 打包文件。

  4. 关键代码保存在打包脚本build.js中:

    function _generateAllTransformers(sourceCode) {
    // 使用正则表达式匹配以 _transformer 结尾的类名
    const classNames = sourceCode.match(/class\s+([^\s{]+)_transformer\s*{/g);

    // 提取类名 const transformerClassNames = classNames.map(name => name.match(/class\s+(^\s{+)_transformer\s*{/)1);

    console.log("enabled transformers:" + transformerClassNames);

    var placeHolder = "" transformerClassNames.forEach((item, index, arr) => { if (index == 0) { placeHolder += '{' } else { placeHolder += "," } placeHolder += "\"" + item + "\": new " + item + "_transformer()" if (index == arr.length - 1) { placeHolder += "}" } });

    console.log('transformer map: ' + placeHolder);

    let result = sourceCode + "\ntransformers=" + placeHolder

    console.log("Result:\n" + result);

    return result; }

    ---
  5. 项目创建过程

     项目初始化:npm install terser --save-dev
     创建脚本文件:创建'build.js',用于运行Tenser
     创建src文件目录:创建源码目录用于编写转换脚本