@lingxiteam/ebe-utils
v0.2.4
Published
## cli
Downloads
625
Maintainers
Keywords
Readme
出码模块工具
cli
setup
eve setup
出码模块的后置处理,如拷贝静态文件等
move
通过指定的入口文件,将该文件所有关联文件一起拷贝到指定产物目录下。用于将项目中的组件抽离出来成为一个独立的组件。减少人工抽离时,过多转移文件的问题。
eve move ./a/index.ts --o ./dist
以上表示,将 ./a/index.ts
文件所有关联文件一起拷贝到 ./dist
目录下。
工具类
codeCreate
一键出码
import {
findBusiCompById,
findPageInstByVersionId,
getThemeCss,
qryAttrSpecPage,
qryPageCompAssetList,
qryPageInstListByAppId,
queryFrontendDatasourcePage,
queryFrontendHookList,
findApplication,
} from '@/services/api';
import { useEffect } from 'react';
import { codeCreate, init } from '@lingxiteam/ebe-utils';
const Page = () => {
useEffect(() => {
init();
}, []);
const onFinish = async (values: any) => {
await codeCreate({
appId: values.appId,
platform: values.platform ? 'APP' : 'PC',
baseUrl:
process.env.BASE_URL === 'http://10.10.179.140:8047/HJF/'
? 'http://10.10.179.140:8048/HJF/'
: process.env.BASE_URL!,
services: {
findBusiCompById,
findPageInstByVersionId,
getThemeCss,
qryAttrSpecPage,
qryPageCompAssetList,
qryPageInstListByAppId,
queryFrontendDatasourcePage,
queryFrontendHookList,
findApplication,
},
// 为 true 时,会自动翻译页面名称作为路由 path
needTranslatePagePathToEnglish: true,
// 默认为 true,会自动发起浏览器下载 zip 文件
autoDownloadOnBower: true,
// 默认为 true,忽略静态文件生成,通过 ebe setup 命令下载静态文件
useEbeSetup: true,
});
};
return <></>;
};
export default Page;
clearLXPagesDSL
使用内定规则清理 dsl,注意传入数据是一个页面 dsl 数组,如果仅有一个页面,可以传入 [page]
const clearPages = clearLXPagesDSL(pages);
for 开发
在 constants.ts 中修改规则
一个 key 对应一个规则,一般规则中需要存在 rule 函数,如果对象是数组,则必须存在 loopRule 和 loop
export interface IRule {
// 是否删除的判断规则,会根据
rule?: (props: IRulePrams) => any;
// 如果存在 loopRule 表示循环对象是一个数组,就根据 loop 中定义的规则清理 item,loop 中的 key 为 loopRule 返回值的判断依据
loopRule?: (item: any) => string;
loop?: IRulesType;
}
rule 函数
export interface IRulePrams {
// 根据当前循环的数据 key,比如 data.a.c ,paths 为 ['data','a','c']
paths: string[];
// 此时循环中的值
value: any;
// 此时循环中的key
key: string;
// 提供的工具类,此时的值和data比较,如果是字符串相等则返回 true,如果对象和 data key-value 都相同的值会被删除,并返回清楚后的新对象
diffraction?: (data: any) => any;
}
({ paths, value, key, diffraction }) => any;
rule
rule 函数可以返回 true 或者对象,如果返回 true 表示删除当前的对象,如果返回对象,则表示用新对象替换旧对象
属性 diffraction 为提供的工具方法
const in = {
size: 'm',
title: 'hellp',
number: 123
}
const diff = {
size:'m',
}
const out = diffraction(diff);
此时 out 为
const in = {
title: 'hellp',
number: 123
}
以上逻辑表示当 in 中的值和 diff 中的值相等时,删除
一般用法为
const ruleObj = {
rule: ({ diffraction }) => {
// 当对象中的某个字为xxx的时候 delete value.xxx
const diff = {};
return diffraction(diff);
},
};
loop & loopRule
loopRule 传入数组 item 返回一个 key,比如常用到的 components 中要找到某个 组件类型。
export const lingxiDslRules: IRulesType = {
components: {
loopRule: (item) => item.compName,
loop: componentsRule,
},
};
返回 compName 作为 loop 的 key
const components = [
{ compName: 'A', title: 'A' },
{ compName: 'C', title: 'C' },
];
const loop = {
A: {
rule: () => any,
},
C: {
rule: () => any,
},
};
以上逻辑表示循环 components 当 item 的 compName 等于 A 时,执行 loop.A 的规则
高级技巧
由于 rule 返回对象时,会覆盖旧的值,因此可以在 rule 中调用 removeObjectByRules 等方法来进一步实现内层的数据清理。
比如 View 组件的 components 也需要清理,就可以如下使用
import { removeObjectByRules } from './index';
import { IRulesType } from './types';
const isTrue = {
rule: () => true,
};
const componentsRule: IRulesType = {
View: {
rule: ({ value, diffraction }) => {
if (value?.components) {
return removeObjectByRules(value, lingxiDslRules);
}
},
},
};
export const lingxiDslRules: IRulesType = {
components: {
loopRule: (item) => item.compName,
loop: componentsRule,
},
};