com.iflytek.clst.transformation
v1.0.1
Published
clst questionbank transformation
Downloads
1
Maintainers
Readme
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.新增题型自动注册原理
维护一个全部map用于保存所有转换器
打包时遍历src 路径下的所有js类,找到以"_transformer"结尾的类,生成transformer对象并保存到map中。
将map 追加到合并的js中间产物,最后交给Terser 打包文件。
关键代码保存在打包脚本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; }
项目创建过程
项目初始化:npm install terser --save-dev 创建脚本文件:创建'build.js',用于运行Tenser 创建src文件目录:创建源码目录用于编写转换脚本