first commit

This commit is contained in:
编码猿
2024-09-27 01:28:38 +08:00
commit a9bde91e8e
2653 changed files with 701970 additions and 0 deletions

View File

@@ -0,0 +1,183 @@
## TsxVueClassApi
基于`Vue Class Api``TypeScript``JSX`,搭建的一套项目脚手架,实现了很多常用的注解,同时基于`babel`插件通过`Ast`语法树进行路由配置文件的自动生成等。
如果你喜欢`JSX`,那么这套脚手架你应该会十分喜欢,代码语法如下:
```tsx
import "@pageLess/Home.less";
import { Component, Vue } from 'vue-property-decorator';
import HelloWorld from '@components/HelloWorld';
import { HomeLogic } from "@logic/page/Home.logic";
import { Route, RawLocation } from 'vue-router';
import { Getter } from "vuex-class";
import { BaseLayout, RouterMeta } from "@layout/base.layout";
@Component
export default class Home extends BaseLayout {
// 抽离tsx页面组件中所有js业务逻辑到独立的类中tsx组件只负责页面
// 因为tsx内部this指向Vue而logic.ts 中this默认指向类本身但是这里需要this指向Vue和类本身
// 所以这里传入tsx中的this对象
private HomeLogic: HomeLogic = new HomeLogic(this);
// RouterMeta 是 vue-router 的路由 meta 配置信息,
// 会被我的插件通过ast语法树提取注入到自动生成的路由配置
// 文件中,所以名字不要随意改动,值请随便!
private RouterMeta: RouterMeta = {
title: '首页',
showNav: true,
isLogin: true
}
@Getter('GettersTabsContentArr') public readonly getterFoo!: Array<any>;
public async created() {
// utils/文件夹下中所有类中的方法,只要使用了装饰器 @GlobalMethod()
// 那么被装饰方法就会自动 prototype 到vue中的全局方法中
console.log(this.$setToken())
await this.HomeLogic.StartUp();
}
// 路由拦截器
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
console.log('beforeRouteEnter')
next()
}
// 按钮组件
public ClickButton(): JSX.Element {
return (
<el-button type="danger" onclick={async ()=>{
await this.HomeLogic.getData()
}}>发送请求</el-button>
)
}
protected render() {
return (
<div class="home">
<HelloWorld msg="向HelloWorld props传参"/>
<input type="text" v-model={this.HomeLogic.title}/>
<h2>{this.HomeLogic.title}</h2>
{this.ClickButton()}
<ul>
{
this.HomeLogic.List.map((v:any)=>{
return <li>{v.name}</li>
})
}
</ul>
</div>
)
}
}
```
**这个脚手架我们正在项目中使用也在支持开发和完善阶段**
## 1安装
> git clone https://gitee.com/bmycode/vue-class-api-tsx.git
> npm i
> npm run start
**注意**
`Vue`官方原生底层就支持`JSX`语法,但是官方没有关于`Vue`中使用`JSX`的文档,而且很多`Vue`ui框架和第三方插件都没有相关语法但是这不影响我们在`Vue`中正常使用`JSX`。很多语法需要特殊注意和改造一下!!
## 2使用
下面说下这个脚手架的使用和注意事项。
### 2.1:项目结构
```txt
├── README.md
├── babel.config.js babel配置文件
├── bin 终端NewFile工具
│   ├── config
│   │   └── index.js
│   └── tinit
├── dist 打包后的文件夹
├── gulpfile.js gulp配置文件实现监听page自动生成路由文件
├── package.json 核心依赖配置文件
├── public 公共的资源文件
├── src 存放核心源码
│   ├── application 页面相关
│   │   ├── App.tsx 最外层顶级父组件
│   │   ├── assets 静态资源回合webpack打包进源码
│   │   ├── components 公共组件
│   │   ├── layout TSX组件的父类
│   │   ├── logic TSX组件中的js逻辑抽象层
│   │   │   ├── Base.logic.ts 所有TSX组件的js逻辑父类
│   │   │   └── page 对应页面的TSX组件逻辑抽象
│   │   └── page 存放TSX页面组件
│   └── core 核心JS层
│   ├── annotation 存放自己开发的装饰器
│   │   ├── Http.annotation.ts 请求装饰器
│   │   ├── Ioc.annotation.ts IOC依赖装饰器
│   │   └── Register.annotation.ts 启动装饰器
│   ├── config 站点配置文件
│   │   ├── configure.config.ts 核心配置文件
│   │   └── route.config.ts 自动生成的路由配置文件
│   ├── dao axios的封装
│   ├── model TS存取器
│   ├── run 项目的启动类
│   │   ├── init.run.ts 初始化Vue各种配置
│   │   └── start.run.ts 初始化Vue
│   ├── service 请求的service层封装
│   │   └── impl 请求service的具体类
│   ├── store Vuex的配置
│   ├── types 自定义的声明文件
│   └── utils 工具函数
├── tsconfig.json TS的配置文件
└── vue.config.js Vue-cli3 的配合文件
```
### 2.2:使用注意事项
**1** 项目中的路由使用的是`vue-router`,同时我借鉴了`Nuxt.js`的思想,自己开发了路由配置文件自动生成的插件,这个插件是`Vue-cli 3`的插件,所以不能在`Vue cli 2`的项目中使用!!
插件源码已经提交`npm`包市场!请完整阅读下面的插件文档,路由的配置文件让插件帮我们自动生成就好了!!!
[vue-cli-plugin-tsx-autorouter](https://www.npmjs.com/package/vue-cli-plugin-tsx-autorouter)
**2** 同时借鉴`PHP`开发框架`Laravel`开发终端命令行工具,通过命令帮我们创建带有模板代码能直接运行的文件!代码放在 `bin/` 文件夹中!
使用手册:
```bash
╭─bmy@MacBook-Pro /Applications/Source/TsxVueClassApi master*
╰─$ ./bin/tinit -h
Usage: tinit [options]
Options:
-t, --file-type <type> 文件类型: [pagelogicserviceimplless]
-n, --file-name <name> 被创建的文件名称
-i, --is-create <is> 是否为 -t 参数自动创建相关文件类型 (default: false)
-v, --version 显示当前的版本
-h, --help display help for command
```
参数说明:
- -t需要被创建的文件类型取值 pageTSX页面logicTSX页面的js抽象层service请求中间层的接口impl实现接口的类lesscss样式文件。可以多传
- -n需要被创建的文件名
- -i如果数值为true那么会自动创建 -t 参数所有的文件类型
使用案例:
```bash
╭─bmy@MacBook-Pro /Applications/Source/TsxVueClassApi master*
╰─$ ./bin/tinit -t page logic -n Test
成功创建文件...
```
上面命令执行后会分别在`src/application/page`中创建创建文件`Text.tsx`页面组件,同时在`src/application/logic/page`中创建`Test.logic.ts`的逻辑层文件。
多试几次,请自行熟练掌握!!
## 3开发中功能
- [ ] 1实时监听`configure.config.ts`配置文件,然后根据`ApiList`中的对象`key`名称自动在`service`层的类中生成对应的方法,降低手动复制的低效率!
- [ ] 2实现对整个项目所有类的收集然后各个文件不需要多次对各种文件的引入