1.0.2 • Published 4 years ago

sofa-template-helper v1.0.2

Weekly downloads
1
License
MIT
Repository
-
Last release
4 years ago

sofa-template

sofa publish template

流程设计:

1,发布前检查

(1)是否有效的git仓库信息? 是否为有效的git仓库(checkGitInstall, checkGitLogin, checkGitRemote)

(2)是否包含配置文件? 1-查找当前目录下是否包含sofa.template.config.js文件 2-检验是否有效(这里不校验name, type, parentId,校验其他字段是否存在及值的类型)

2,与用户交互 (1)选择类型:project, module, component,选择完写入sofa.template.config.js文件中。

(2)输入名称:根据type和name,到DB模块去查找有无重名的情况,没有则继续。

(3)如果选择type是module,则选择父亲模块。(基础数据是DB提供,有id和name)选择完把id写入sofa.template.config.js文件中,非module,parentId字段置null。 如果选择type是project,校验sofa.template.config.js中的modulesPath,compoentPath字段不为空并且有效。

//(4)内置hooks这部分可以先不做选择内置的hooks,多项选择,按顺序输入选择,把选择结果写到配置文件中。

3,代码质量检查

(1)project:查找根目录或package.json中有无eslint/tslint配置项

(2)modules/components:当前目录下有没有index文件

4,更新远程代码,并在仓库中打版本标签sofa_V0.0.1。(与git模块交互,在仓库中打tag)

5,检查数据库连接,读sofa.template.config.js配置 + 其他参数{url,version=0.0.1,status=1,publisher}写入模板库

涉及其他模块的接口:

1,git模块 (1) checkGitInstall(2)checkGitLogin (3)getLoginUserInfo (4) checkGitRemote(5)addTag

2,DB模块 (1) checkDbConnect (2)setTemplate (3)addLog(4)getTemplates

使用

运行sofa publish template命令,根据提示输入关键信息,最后得到发布结果反馈。

sofa update template

1,发布前检查

(1)是否有效的git仓库信息? 是否为有效的git仓库(checkGitInstall, checkGitLogin, checkGitRemote,checkGitAuth)

(2)在库里能否找到记录? 和DB接口交互,ifCanUpdate(gitAddress), 到库里找id,如果存在记录并且可以更新,返回id,yes继续操作,no退出。

(3)是否包含配置文件? 1-查找当前目录下是否包含sofa.template.config.js文件 2-检验是否有效(这里不校验name, type, parentId,校验其他字段是否存在及值的类型)

2,与用户交互

(1)选择类型:project, module, component,选择完写入sofa.template.config.js文件中。

(2)输入名称:根据name和上文中的id,到DB模块去查找除当前id外的其他记录有无重名的情况,没有则继续。

(3)如果选择type是module,则选择父亲模块。(基础数据是DB提供,有id和name)选择完把id写入sofa.template.config.js文件中,非module,parentId字段置null。 如果选择type是project,校验sofa.template.config.js中的modulesPath,compoentPath字段不为空并且有效。

(4)内置hooks这部分可以先不做选择内置的hooks,多项选择,按顺序输入选择,把选择结果写到配置文件中。

3,代码质量检查

(1)project:查找根目录或package.json中有无eslint/tslint配置项

(2)modules/components:当前目录下有没有index文件

4,更新远程代码,并在仓库中打版本标签,这里需要做版本加法指定某一增量版本。(与git模块交互,包括获取tag list、打tag)

5,检查数据库连接,读sofa.template.config.js配置 + id + publisher写入模板库

涉及其他模块的接口:

1,git模块 (1) checkGitInstall (2)checkGitLogin (3)getLoginUserInfo (4) checkGitRemote(5)addTag(6)getTagsList 按顺序返回 2,DB模块 (1) checkDbConnect (2)setTemplate (3)addLog(4)getTemplates (5)ifCanUpdate

sofa remove template / sofa retrieve template

无效流程:

  1. 运行 sofa remove template 命令;
  2. 调用 git 模块方法,判断用户是否登录,获取登录信息,若失败退出运行,成功执行下一步;
  3. 与 database 模块交互,获取当前用户已经发布的全部template,依次列出状态为有效的模板ID 和模板名称,并提示用户需要输入要删除的模板名称或者模板id,并校验是否为自己发布的template;
  4. 若不通过校验,给出重试提示;
  5. 若通过校验,与database 模块交互,进行软删除,删除成功后输出提示信息;

有效流程:

  1. 运行 sofa retrieve template 命令;
  2. 调用 git 模块方法,判断用户是否登录,获取登录信息,若失败退出运行,成功执行下一步;
  3. 与 database 模块交互,获取当前用户已经发布的全部template,依次列出状态为无效的模板ID 和模板名称,并提示用户需要输入找回的模板名称或者模板id,并校验是否为自己发布的template;
  4. 若不通过校验,给出重试提示;
  5. 若通过校验,与database 模块交互,将模板状态置为有效;

涉及其他模块的接口:

1、sofa-git:checkGitLogin,getLoginUserInfo;

2、sofa-database: getMyTemplateList(需提供当前用户发布的模板信息(包括id,name,status));

sofa search template keywords

  1. 用户输入检索模板关键字;
  2. 拿到关键字在模板库中检索符合条件的模板(通过 sofa-database,参数是‘,’分割的字符串)
  3. 回显可以使用的模板列表table,必要这些字段 id, name, type, url, operator, detail , id不展示作为之后可能的扩展功能;

涉及其他模块的接口:

1、sofa-database: searchTemplateByKeywords;

接口整理

若干问题的解释

1,配置文件是采用js,如何自动修改,以及如何避免脏值? Answer:

在相应的操作后会检验文件是否存在,如果不存在就自动在当前目录生成一个配置文件,并生成默认字段及默认值。
以sofa.template.config.js为例:
module.exports = {
    name: '',
    type: '',
    frame: 'react',(当前目录或往上找package.json文件,其中description有无主流框架关键词)
    isTs: false,(project判断目录下是否存在tsconfig.json文件/package.json中description有无ts关键词,module/component判断目录下的index文件的后缀名)
    isBlank: true,
    detail: '',
    parentId: null,
    modulePath: '',
    componentPath: '',
    microsPath: '',
    hooks: [],
    plugins: [],
};
避免脏值是通过配置文件的校验和与用户交互输入,比如name不能重复,parentId是有效id。

2,module模板常需要在后执行脚本谁来cover?内置hooks有哪些? Module模板自身去cover,可以根据config文件中的hooks配置,逐一执行,因为主要还是对module自身的修改,有小部分对父级project的修改,通过询问用户修改的父级页面。 内置hooks有如下:(待补充) (1)afterAddModuleHook:与用户交互获取名字,修改所有名字、是否需要自动修改menu,与用户交互获取文件路径、是否需要国际化,与用户交互获取文件路径 (2)afterAddModuleHook:是否需要自动修改menu,与用户交互获取文件路径、是否需要国际化,与用户交互获取文件路径

3, 模板中脚本的依赖的安装时机是什么时候?这些依赖在哪里配置?