0.6.7 • Published 4 days ago

easescript v0.6.7

Weekly downloads
6
License
MIT
Repository
github
Last release
4 days ago

EaseScript

EaseScript 是一个类型推导脚本编译器,目的是用ES6的语法编译成多个不同运行环境的脚本语言。

EaseScript 将通用的WEB技术栈集成在一起按需构建打包,使用时开箱即用无需过多配置。在与后端API交互中直接实现互通无需中间请求配置, 用ES6语法便可完成前后端的所有工作。 为开发者提供了一个愉悦的开发方式

快速开始

1、安装VSCode扩展插件

打开VSCode编辑器并在扩展面板输入 "EaseScript" 选择并安装此扩展来支持语法高亮和类型提示。 目前仅支持 VSCode

2、进入控制台并输入以下命令

npm install es-installer -g

安装成功后在控制台输入 esi --init 按提示操作即可

语法

语法文档,请参照 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference

1、不支持的语法:

yield, yield* 和生成器函数

2、暂不支持的运算符:

.?(可选链运算符), ??(空值合并运算符), ??=(逻辑空赋值)

3、语法关键字(没有列举出来的表示与ES6一致)

package:声明命名空间,定义在文档的开头

语法:package 标识符; 如果不指定标识符则为全局。

行内声明:

package com;
class Person{
}

块级声明:

package com{
   class Person{
   }
}

以上两种方式都是声明了在 com 空间中定义的 Person 类

public 修饰符,定义类或者成员属性为公开。默认类或者成员属性为public

语法:protected 标识符:type

public name:string;

protected 修饰符,定义成员属性为保护,对外不可访问,子类可访问

语法:protected 标识符:type

protected name:string;

private 修饰符,定义成员属性为私有,对外不可访问, 本类中可访问

语法:private 标识符:type

private name:string;

import 导入类, 或者导入资源文件(.js, .css)

语法:

import 标识符

import com.Person //导入 Person 类
import “index.css” //导入index.css 文件
import * as V from “vue” //导入vue 到 V 的变量中
import {ref} from “vue” //导入vue 中的ref

class 定义类

语法:public class 标识符 implements 标识符, ...

class Person extends Human implements IWorker,IHappy{
  name:string
  protected address:string
  private phone:number
  constructor(name:string){
      this.name=name;
      this.phone = 123456789;
      this.address = "sh";
  }
}

typeof: 获取表达式的类型,可以与type 配合使用

语法:typeof 表达式

typeof this.name === ‘string’
type T1 = typeof this.name; //将表达式类型定义给T1

type: 类型声明,方便在代码块中引用类型,或者是将复杂类型简单化,又称为缩短类型。类型声明后只当类型引用不会被构建在代码中。 type 关键字的定义只能出现在块级域中

语法:type 标识符 = 引用类型;

type T1 = string;
type T1 = typeof this.name; //从一个表达式中引用类型
const name:T1 = zs;

3、注解符

注解符是在编译阶段根据不同的指令调整、修改、注入不同的代码块,以达到快速开发的目的。

注解符分为:表达式注解符、声明式注解符和编译宏注解符

声明式注解符: Provider,Callable,Runtime,Syntax,Env,Router,Post,Get,Delete,Put,Option,Deprecated,Define,Internal,Alias,Override,Dynamic,Embed,SkinClass,Abstract,WebComponent,HostComponent,Require,Required,Import,Main,Reference, DOMAttribute,Injector,Reactive,Hook

Runtime,Syntax,Env: 编译时注解符

主要是在编译时如何构建代码。暂未实现

Router,Post,Get,Delete,Put,Option:路由注解符 主要配置在服务端类成员的方法上,Router, 是其它路由注解符的实现, Post,Get,Delete,Put,Option 对应的是路由接收的请求方法。 如果要使用 Router 来定义路由:@Router('/path', method=post), method默认为get;

语法:@Post(path)。 Get,Delete,Put,Option 语法相同

package com.api;
class Person{
  @Post('/list')
  list(id?){
	return [1,2]
  }

在构建后的代码中会自动生成路由文件, 路由规则为:/list/<id?>, 对应的文件为 com.api.Person::list。

Embed:嵌入图片注解符 主要用在成员属性上注入图片的引用, 一般用于前端

语法:@Embed(path)

package com.views;
import web.components.Component
class HomePage extends Component{
  @Embed('./logo.png')
  private logo:string;
  @Override
  render(){
	 return <img src={logo} />
  }

Define,WebComponent,SkinClass:文档类型注解符 定义文档的类型,这个主要在编译阶段配合插件选项来构建代码

语法:@Define(符号类型, 值, 参数)

package com.views;
import web.components.Component
@Define(slot, title,  scope:{name:string}) //给当前组件定义插槽属性, 在编译阶段能正确引用
class HomePage extends Component{
}
/*
<HomePage>
<slot:title>
	<div>title content</div>
</slot:title>
</HomePage>*/

Provider,DOMAttribute,Injector,Reactive,Hook,Alias, Required, HostComponent:成员属性注解符 Provider,DOMAttribute,Injector,Reactive,Hook,Alias, Required 用于前端组件。DOMAttribute, Hook, Alias, Required 不常用,主要是在编写类型描述时对成员属性的一个补充。

语法:@Define(符号类型, 值, 参数)

package com.views;
import web.components.Component
class HomePage extends Component{

  @Injector //从父组件中注入app对象的引用
  private app:App;

  @Reactive //一个有着响应式的属性引用
  private list=[]

  @Provider //提供一组数据,在子组件中引用. 提供者的修饰符必须为public
  public data(){
    return {name:'HomePage'};
  }
}

Require(已弃用, 使用import代替), Import(已弃用, 使用import代替), Reference(引用类型文档):资源引用注解符 语法:@Reference(filepath)

Override, Abstract, Internal, Main, Callable, Dynamic:修饰符注解符 Internal, Main, Callable, Dynamic, 用于在编写类型描述时对成员属性的一个补充

语法:@Override

package com.views;
import web.components.Component

@Abstract // 此类不能被直接实例化, 需要通过子类继承
class HomePage extends Component{

  @Main //为此类添加一个直接调用的入口,在这个类被加载时执行。此注解符绑定的方法必须为静态公开方法。 通过利用这个做一些初始化的工作,当然一般用于入口文件中,比如 App;
  static main(){
    //to do...
  }

  @Override //对父方法的覆盖
  render(){
    //...
  }
}

表达式注解符:

Router,Http

Router:生成一个路由对象 主要用于生成一个前端页面的路由对象

语法:@Router(className, [param=params])

package views;
import web.components.Component
class Home extends Component{
  @Override
  render(){
    const params = {
      id:5
    }
	  const route = @Router(views.HomePage, params);
  }

Http:发送Http 请求 主要用于在前端页面向后端请求数据

语法:@Http(className, methodName, [param=param], [data=data], [options=options] )

package views;
import web.components.Component
class Home extends Component{

  async loadData(){
    const params = {
      id:5
    }
    const data = await @Http(com.api.Person, list, params)
  }
}

编译宏注解符:

Runtime,Syntax,Env,Version,

语法:@Runtime(platform) //client, server;

语法:@Syntax(PluginName) //es-vue, es-php,...

语法:@Env(propName, value)

语法:@Version(PluginName, value, operator) // operator: egt,elt,neq,gt,lt,eq

package;
import web.components.Appliction;
class App extends Appliction{
  @Main
  static main(){
    when( Env(NODE_ENV, development) ){
        //如果当前为开模式
        System.setConfig('http.request.baseURL', '/api');
    }then{
        //生产模式
        System.setConfig('http.request.baseURL', '/'); 
    }
  }
}
0.6.7

4 days ago

0.6.6

4 days ago

0.6.5

14 days ago

0.6.3

19 days ago

0.6.4

19 days ago

0.6.2

24 days ago

0.6.1

30 days ago

0.6.0

1 month ago

0.5.6

7 months ago

0.5.5

7 months ago

0.5.4

7 months ago

0.4.1

8 months ago

0.5.3

8 months ago

0.5.0

8 months ago

0.5.2

8 months ago

0.5.1

8 months ago

0.4.0

10 months ago

0.3.0

11 months ago

0.3.2

11 months ago

0.3.1

11 months ago

0.2.0

1 year ago

0.1.30

1 year ago

0.1.31

1 year ago

0.1.32

1 year ago

0.1.33

1 year ago

0.1.27

1 year ago

0.1.28

1 year ago

0.1.29

1 year ago

0.1.20

1 year ago

0.1.21

1 year ago

0.1.22

1 year ago

0.1.24

1 year ago

0.1.25

1 year ago

0.1.26

1 year ago

0.1.16

1 year ago

0.1.17

1 year ago

0.1.18

1 year ago

0.1.19

1 year ago

0.1.14

1 year ago

0.1.15

1 year ago

0.1.10

1 year ago

0.1.11

1 year ago

0.1.12

1 year ago

0.1.13

1 year ago

0.1.8

1 year ago

0.1.7

2 years ago

0.1.9

1 year ago

0.1.6

2 years ago

0.1.5

2 years ago

0.0.78

2 years ago

0.1.0

2 years ago

0.1.2

2 years ago

0.1.1

2 years ago

0.1.4

2 years ago

0.0.75

2 years ago

0.0.76

2 years ago

0.0.77

2 years ago

0.0.73

2 years ago

0.0.74

2 years ago

0.0.70

2 years ago

0.0.71

2 years ago

0.0.72

2 years ago

0.0.62

2 years ago

0.0.63

2 years ago

0.0.64

2 years ago

0.0.65

2 years ago

0.0.66

2 years ago

0.0.67

2 years ago

0.0.68

2 years ago

0.0.69

2 years ago

0.0.60

2 years ago

0.0.61

2 years ago

0.0.59

2 years ago

0.0.56

3 years ago

0.0.57

3 years ago

0.0.58

3 years ago

0.0.52

3 years ago

0.0.53

3 years ago

0.0.54

3 years ago

0.0.55

3 years ago

0.0.51

3 years ago

0.0.49

3 years ago

0.0.48

3 years ago

0.0.45

3 years ago

0.0.46

3 years ago

0.0.47

3 years ago

0.0.44

3 years ago

0.0.43

3 years ago

0.0.41

3 years ago

0.0.42

3 years ago

0.0.40

3 years ago

0.0.38

3 years ago

0.0.39

3 years ago

0.0.37

3 years ago

0.0.35

3 years ago

0.0.36

3 years ago

0.0.34

3 years ago

0.0.33

3 years ago

0.0.32

3 years ago

0.0.30

3 years ago

0.0.31

3 years ago

0.0.29

3 years ago

0.0.26

3 years ago

0.0.27

3 years ago

0.0.28

3 years ago

0.0.24

3 years ago

0.0.25

3 years ago

0.0.23

3 years ago

0.0.20

3 years ago

0.0.21

3 years ago

0.0.22

3 years ago

0.0.18

3 years ago

0.0.19

3 years ago

0.0.16

3 years ago

0.0.17

3 years ago

0.0.15

3 years ago

0.0.13

3 years ago

0.0.14

3 years ago

0.0.12

3 years ago

0.0.10

3 years ago

0.0.11

3 years ago

0.0.9

3 years ago

0.0.8

3 years ago

0.0.7

3 years ago

0.0.50

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.6

3 years ago

0.0.1

3 years ago

0.0.3

3 years ago

0.0.2

3 years ago

1.2.7

3 years ago

1.2.6

3 years ago

1.2.4

3 years ago

1.2.3

3 years ago

1.2.2

3 years ago

1.2.1

3 years ago

1.2.0

3 years ago

1.1.28-beta

3 years ago

1.1.27-beta

3 years ago

1.1.26-beta

3 years ago

1.1.25-beta

3 years ago

1.1.24-beta

3 years ago

1.1.23-beta

3 years ago

1.1.22-beta

3 years ago

1.1.21-beta

3 years ago

1.1.20-beta

3 years ago

1.1.19-beta

3 years ago

1.1.18-beta

3 years ago

1.1.17-beta

3 years ago

1.1.16-beta

3 years ago

1.1.15-beta

3 years ago

1.1.14-beta

3 years ago

1.1.13-Beta

3 years ago

1.1.12-Beta

3 years ago

1.1.11-Beta

3 years ago

1.1.1-2.Beta

3 years ago

1.1.1-1.Beta

3 years ago

1.1.10

3 years ago

1.1.9

3 years ago

1.1.8

3 years ago

1.1.7

3 years ago

1.1.5

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.0.21

3 years ago

1.0.20

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.15

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago