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`
}
}
}