@ttk/recat enterprise develop framework
通用
* Typography排版
导航
* PageHeader页头
* Breadcrumb面包屑
数据录入
* Mentions提及
数据展示
* Comment评论
* Descriptions描述列表
* Empty空状态
* Statistic统计数值
反馈
* Skeleton骨架屏
* Result结果
* ConfigProvider全局化配置
* 例如Icon图标的图标主题风格。可选实心、描线、双色等主题风格
以下业务相关组件分离,当前版本在@ttk/component/dz下,后续版本废弃删除
* MoneyCellHeader
* MoneyCell
* QuanAndForeCurrency
* SubjectDisplay
* AccountDisplay
* TableSettingCard
* TableOperate
* TableOperate2
* PrintOption
* PrintOption4
* PrintOption3
* FormDecorator
* GridDecorator
* VirtualTable
* VirtualTable2
module.exports = {
fxVue: false, // 是否使用Vue
fxReact: true, // 是否使用React
}
`$3
不仅仅是dev模式下的热更新,重新npm start或npm run build均可读取文件缓存,大幅提速$3
加载顺序为:ttk_entry 异步----> ttk_host 异步----> ttk_json_apps/ttk_hook_apps
| 联邦模块 | 模块类型 | 入口 | 说明 |
| ------- | ------ | --- | --- |
| ttk_entry | 本地 | src/index.js | 启动模块,开始显示loading,异步加载host模块后显示返回内容 |
| ttk_host | 本地/远程 | src/host.js | 异步加载json和hook模块后初始化,返回显示内容,可发布为远程模块供不同项目使用(包括react等依赖) |
| ttk_hook_apps | 本地 | src/apps/index.js | hook写法模块,扫描src/apps目录内的index.js文件加载业务app |
| ttk_json_apps | 本地 | src/jsonApps/index.js | json写法模块,扫描src/jsonApps目录内的index.js文件加载业务app |2.4 简化模块配置、打包配置
统一开发、生产模式的webpack配置
| 配置文件 | 配置说明 |
| ------ | ------ |
| fx.webpack.config.js | webpack常用配置、自定义配置,默认配置即可 |
| config/devServer.js | 开发模式服务代理devServer |
| config/moduleFederation.js | 联邦模块配置,默认配置即可,一般不修改 |2.5 取消app模块概念和相关配置
$3
不区分模块,在src/jsonApp、src/apps直接创建目录并新增app即可,无需配置。框架将自动搜索src/jsonApp、src/apps目录内index.js文件并引入
$3
执行npm run delModulesConfig可删除(src/jsonApps目录下)以下配置文件
* app模块下theme目录关于主题样式文件的引用配置
* app模块下index.js关于app入口文件的引用配置
* app模块index.less关于app样式文件的引用配置$3
src/jsonApps/index.js
`
// 搜索加载所有app
const files = require.context('./', true, /\.\/.+\/index\.js$/)
// 搜索加载指定目录(模块)下app, 如搜索edf和gl目录所有app
// const files = require.context('./', true, /\.\/(edf|gl)\/.+\/index\.js$/)
`3. @ttk/react目录结构
3.1 项目目录
| 目录/文件 | 说明 |
| ---- | ---- |
| config | 开发模式服务代理配置,联邦模块配置 |
| help | 框架相关说明文档,包括json、hook工程升级说明 |
| public | 单页应用index.html模板所在项目 |
| script | 脚本,例如:delModulesConfig为json工程升级时自动删除无用app模块配置文件的脚本 |
| src | 源码 |
| static | 静态资源目录,打包时拷贝至./dist/static |
| .babelrc | babel配置文件,一般不需要修改 |
| .eslintignore | eslint配置文件,配置忽略校验的文件或目录 |
| .eslintrc.json | eslint配置文件,配置校验规则 |
| .gitignore | git配置文件,配置忽略上传的文件或目录 |
| .npmrc | npm配置文件,配置npm仓库 |
| fx.webpack.config.js | fx-webpack配置文件,统一dev/prod配置,具体见文件内注释说明 |
| package.json | npm配置文件,配置依赖包等 |
3.2 src目录
| 目录/文件 | 说明 |
| ---- | ---- |
| apps | hook写法的app,业务开发主要目录 |
| assets | 图片、less、css等资源 |
| components | 自定义组件 |
| constant | 全局常量 |
| jsonApps | json写法的app,业务开发主要目录 |
| mock | mock配置文件 |
| utils | 自定义工具类 |
| index.js | 项目入口文件,import("./bootstrap"), 不修改 |
| bootstraps.js | 加载页面,显示loading,异步加载ttk_host模块(可使用远程模块)后显示host模块,可修改loading组件或引入公共样式 |
| host.js | 异步加载ttk_json_apps、ttk_hook_apps业务模块,可发布为远程模块,一般不修改 |
| polyfill.js | 开头polyfill配置,主要为react-app-polyfill |4 @ttk/react主要依赖及修改说明
4.1 @ttk/app-loader
数据状态管理、业务app容器,原app-loader目录代码, 修改内容:* start函数返回Provider,不绑定dom,删除react-dom
* 更新AppLoader和AppContainer生命周期
* 更新react context使用方式
* 修改其他bug
4.2 @ttk/component
公共组件库,目前主要为原json业务使用组件,原components目录代码,修改内容:* 更新antd 3.26版本,封装新增组件
* 分离业务组件
* 简化样式文件,组件目录和less文件统一调整为导出名称(首字母小写),根据该名称进行按需加载
* 其他样式问题、bug修复
4.3 @ttk/meta-engine
json页面渲染引擎,原meta-engine目录代码,修改内容:* app顶层element的className增加ttk-json-app,用于统一后的新框架样式兼容
4.4 @ttk/fx-webpack
使用webpack5统一开发、打包配置文件,减少过多配置文件和打包命令,使用babel缓存、webpack持久化缓存提供编译速度4.5 @ttk/utils
公共工具类,原utils目录代码5 开发规范及使用说明
5.1 不规范引用或语法
$3
`
// 直接修改为依赖包,'@ttk/component'或'antd'
import { Checkbox } from '../../../../../node_modules/antd';
// 直接修改为依赖包,'immutable'
import {fromJS} from "../../../node_modules/immutable/dist/immutable";
`$3
* 原因:import或者url()的文件webpack会编译打包会生成1份文件,copy-webpack-plugin配置的文件(如vendor目录)会复制生成一份文件,导致重复输出
* 统一用法:
请移至src/assets/img,使用@/assets/img(@为src别名)引入,或者在fx.webpack.config.js配置别名。当然也可移至业务app内其他合适位置
$3
`
import { isArray } from "core-js/fn/array"; // 删除,直接使用Array.isArray
import { Number } from 'core-js' // 删除,直接使用Number
`$3
$3
5.2 样式使用不规范问题
$3
框架升级后app样式也是按需加载的,app使用其他app定义的样式, 将不在正常显示,应在src/assets/app.less配置app公共样式$3
app的style.less文件定义的css类选择器,不包括在当前app名称的css类选择器下,则当app加载时,会覆盖其他app的样式5.3 data.js中组件不规范使用
$3
$3
5.4 不能直接修改React创建的element的props,新版本React已禁止
5.5 app名称的css类选择器下的样式在modal不生效,不应该采取定义全局css类选择器的方式,因为modal是全局的,会影响其他app的modal,应该把app名称的css类选择器名称(或者自定义唯一的类选择器名称)传给modal
`
const ret = await this.metaAction.modal('confirm', {
title: '',
// 传给modal的className
className: 'ttk-scm-app-inventory-automaticcalculationxb-confirm',
width: 400,
content: {title}
})
``