Lesx
例子
github地址:lesx-example
是什么
Lesx
提供了一种开发范式,可以让开发者使用类似vue的单文件模式来开发React应用,做到了style/template/script
三元素分离。它提供了一个webpack loader,可以将下面的DSL:
<style>
a {
color: red;
}
</style>
<template>
<div>
<a onClick={() => {
alert(1);
}}>点我</a>
{console.log(this.props)}
<If condition={ this.props.valid }>
<div>{this.state.name}</div>
</If>
<Button type="primary" onClick={() => {
alert('I am an antd button!');
$setState({
name: 'a new name',
});
}}>antd button</Button>
</div>
</template>
<script>
module.exports = {
props: {
valid: true
},
state: {
name: 'xiangzhong.wxz'
},
};
</script>
转成React Component
!
特性
- 0、没有任何新语法,全部是
JSX
基础语法; - 1、
style/template/script
三元素分离,方便代码维护; - 2、
script
中注入的方法及变量在DSL中可以通过this.xxx
的方式使用; - 3、
script
中注入的方法会被自动绑定到this
作用域; - 4、DSL中自动支持jsx-control-statements控制流标签(If/Choose/When/Otherwise/For/With);
- 5、DSL默认自带
antd
组件(可以配置为其他UI组件库),无需引入,可以直接在DSL中使用antd所有的组件; - 6、智能解析DSL所使用到的
UI library组件
,并按需打包,而不会把整个组件库全部打包进去,最小化打包后的代码体积; - 7、DSL transform后的组件支持
components
属性,可以引入组件库没有的其他组件(自定义或者第三方的); - 8、
style
支持自定义语言(css/sass/less),默认sass
; - 9、非侵入式,类似
svelte
,也许后面会改成自研组件式开发框架而不是基于React
。
loader setting
{
test: /\.lesx$/,
loader: 'lesx-loader',
query: {
loaders: {
js: 'babel',
css: 'style!css',
sass: 'style!css!sass'
},
uiLib: {
libName: 'antd',
libDirectory: 'lib'
}
}
}