帮助文档
NAME
tdf_tools - 二维火 Flutter 脚手架工具,包含项目构建,依赖分析,git等功能。。
SYNOPSIS
tdf_tools GROUP | COMMAND
DESCRIPTION
二维火 Flutter 脚手架工具,包含项目构建,依赖分析,git等功能。。
GROUPS
GROUP is one of the following:
module
模块相关工具: tdf_tools module -h 查看详情
package
封包工具相关:tdf_tools package -h 查看详情
translate
国际化相关:tdf_tools translate -h 查看详情
COMMANDS
COMMAND is one of the following:
git
tdf_tools git【git 命令】:批量操作 git 命令, 例如 tdf_tools git push
router
tdf_tools router:会以交互式进行路由操作,对指定的模块执行路由生成和路由注册逻辑
upgrade
tdf_tools upgrade:升级插件到最新版本
插件安装方式
安装python包
pip3 install tdf-tools --user
安装并更新python包
pip3 install --upgrade tdf-tools --user
安装测试环境python包
pip3 install -i https://test.pypi.org/simple/ tdf-tools --user
安装并更新测试环境python包
pip3 install --upgrade -i https://test.pypi.org/simple/ tdf-tools --user
工具使用流程说明
1.准备工作
git_private_token=***
git_private_token是gitlab的token
获取途径:进入gitlab页面,点击右上角头像,选择Preferences,选择左侧列表中的AccessToken进行创建
上述步骤如果没有做,会在使用插件时,会有提示
2.初始化
i.进入壳目录(确保执行命令在壳目录内)
ii.执行tdf_tools module init
- 判断当前目录是否存在tdf_cache,若不存在,则会自动创建tdf_cache
- 自动读取当前壳模块名称,写入initial_config.json配置文件;
- 读取当前壳分支,写入initial_config.json配置文件;
- 交互式提示用户输入需要开发的模块名并写入initial_config.json配置文件的moduleNameList列表字段中
- !退出,即输入完成
- 自动clone所有开发模块到
../.tdf_flutter
隐藏目录中; - 将所有开发模块分支切换至与壳一致;
- 自动分析依赖树,并由下至上对所有模块自动执行
flutter pub upgrade
;
iii.开发过程中
1.开发模块添加
- 若是有新模块需要添加入开发模块中,可直接修改initial_config.json配置文件,修改moduleNameList字段;
- 执行tdf_tools deps更新依赖
2.新开发模块添加
- 添加新模块后,会提示找不到模块,实际查找的是
tdf_cache
文件夹中的module_config.json文件; - 如果没有找到该模块,则可以执行
tdf_tools module-update
,更新远程module_config.json文件; - 删掉本地的module_config.json文件,重新执行命令即可,脚本会自动判断本地是否存在该配置文件,如果不存在会下载;
请确保gitlab仓库的新开发模块master分支是一个flutter模块,如果判定不是flutter模块,则会报错(判定条件为存在pubspec.yaml文件)
3.版本控制
版本控制请使用tdf_tools命令,命令详情可使用 tdf_tools -h
查看,现已支持大部分命令,若有特殊命令需要执行,可以使用 tdf_tools <git命令>
,如:tdf_tools git add .
4.自动打包发布
暂未接入打包工具,预计下一季度进行支持;
FAQ
windows系统请使用bash命令;
额外功能说明
1.二维数组表达依赖树
生成一个二维数组,可根据该二维数组的数据进行并发打tag,每一层的模块,都可以同时进行打tag发布操作,减少发布耗时;
[
["tdf_channel", "tdf_event", "tdf_network"],
["tdf_widgets"],
["tdf_smart_devices", "tdf_account_module"],
["flutter_reset_module"]
]
如上数据,数组中每一个节点中的模块均可同时打tag,节点之间需要由上至下的顺序进行tag操作
2.插件更新
执行 tdf_tools upgrade
3.远程模块配置文件更新
执行 tdf_tools module module_update
依赖树分析原理
采用有向有/无环图进行依赖树的分析
数据结构采用如下:
class DependencyNode:
def __init__(self):
self.nodeName = ''
self.parent = []
self.children = []
self.delete = False
如上图1:一个正常的依赖树表示;
如上图2:对图1中,依赖树所有节点去重,变换为图2有向图;
分析流程:
依赖图构建
def _generateDependenciesMap(self):
for package in self.__moduleDependenciesMap:
for module in moduleNameList:
if package == module:
self._mNodeDict[self.__moduleName].children.append(package)
self._mNodeDict[package].parent.append(self.__moduleName)
-
共5个节点
-
node构建:
-
{
"模块1":{
"nodeNmae": "模块1",
"parent": [],
"children": ["模块2","模块3","模块4","模块5"],
"delete": False
},
"模块2":{
"nodeNmae": "模块2",
"parent": ["模块1"],
"children": ["模块4","模块5"],
"delete": False
}
"模块3":{
"nodeNmae": "模块3",
"parent": ["模块1"],
"children": ["模块5"],
"delete": False
}
"模块4":{
"nodeNmae": "模块4",
"parent": ["模块1","模块2"],
"children": [],
"delete": False
}
"模块5":{
"nodeNmae": "模块5",
"parent": ["模块1","模块2","模块3"],
"children": [],
"delete": False
}
}
依赖图解析伪代码(以一维数组为例)
def _generateDependenciesOrder(self):
resList = []
while 存在节点delete属性不为True:
for:查找子节点为0的节点
设置节点delete属性为True
for:deleteItemList = 拿到所有delete属性为true的节点
for:遍历所有节点,如果节点的子节点中包含deleteItemList的节点,则将其从子节点列表中删除
-
initial_config.json文件说明
{
"featureBranch": "feature/test_dev_1",
"shellName": "flutter_reset_module",
"moduleNameList": [
"flutter_reset_module",
"tdf_smart_devices",
"tdf_widgets",
"tdf_channel"
]
}
-
module_config.json文件说明
{
"flutter_globalyun_us_module": {
"id": "11111"
"type": "shell",
"git": "git@git.2dfire.net:app/flutter/app/flutter_globalyun_us_module.git"
},
"tdf_router_anno": {
"type": "base",
"git": "git@git.2dfire.net:app/flutter/app/tdf_router_anno.git"
},
}
{
"模块名":{
"id": 项目gitlab id
"类型": gitlab group名
"git": gitlab地址
}
}
后续计划
问题:由于现在flutter ci 【lint】【tag】任务脚本成功率过于低,很多时候是因为项目模块的配置问题导致的,且后续会接入一键打tag工具
方案:在执行统一push前,对所有模块的项目配置信息进行校验,确保数据规范;
插件打包发布命令
插件打包命令
poetry build
插件发布命令
poetry publish
History
2.1.00
- 路由功能支持flutter版本3.3.10,兼容flutter版本2.2.3;
2.0.61
2.0.38
- 路由生成完后增加路由相关代码format(解决windows代码生成后顺序错乱);
2.0.01
1.1.00(2022-4-28)
- 国际化解决输出json中包含转义字符的问题,如\n;
- 四类语言输出文件自动格式化
1.0.55(2022-4-28)
1.0.53(2022-4-28)
- 国际化流程中,兼容解决部分json解析失败问题,譬如字符串中包含"="符号;
错误日志如:Unterminated string starting at: line 1 column 5650 (char 5649)
1.0.50(2022-4-28)