Lesx
例子@H_404_3@
github地址:lesx-example
是什么@H_404_3@
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
!
特性@H_404_3@
- 0、没有任何新语法,全部是
JSX
基础语法;@H_404_26@
- 1、
style/template/script
三元素分离,方便代码维护;@H_404_26@
- 2、
script
中注入的方法及变量在DSL中可以通过this.xxx
的方式使用;@H_404_26@
- 3、
script
中注入的方法会被自动绑定到this
作用域;@H_404_26@
- 4、DSL中自动支持jsx-control-statements控制流标签(If/Choose/When/Otherwise/For/With);@H_404_26@
- 5、DSL默认自带
antd
组件(可以配置为其他UI组件库),无需引入,可以直接在DSL中使用antd所有的组件;@H_404_26@
- 6、智能解析DSL所使用到的
UI library组件
,并按需打包,而不会把整个组件库全部打包进去,最小化打包后的代码体积;@H_404_26@
- 7、DSL transform后的组件支持
components
属性,可以引入组件库没有的其他组件(自定义或者第三方的);@H_404_26@
- 8、
style
支持自定义语言(css/sass/less),默认sass
;@H_404_26@
- 9、非侵入式,类似
svelte
,也许后面会改成自研组件式开发框架而不是基于React
。@H_404_26@
loader setting@H_404_3@
{
test: /\.lesx$/,loader: 'lesx-loader',query: {
loaders: {
js: 'babel',css: 'style!css',sass: 'style!css!sass'
},uiLib: {
libName: 'antd',libDirectory: 'lib'
}
}
}
JSX
基础语法;@H_404_26@
style/template/script
三元素分离,方便代码维护;@H_404_26@
script
中注入的方法及变量在DSL中可以通过this.xxx
的方式使用;@H_404_26@
script
中注入的方法会被自动绑定到this
作用域;@H_404_26@
antd
组件(可以配置为其他UI组件库),无需引入,可以直接在DSL中使用antd所有的组件;@H_404_26@
UI library组件
,并按需打包,而不会把整个组件库全部打包进去,最小化打包后的代码体积;@H_404_26@
components
属性,可以引入组件库没有的其他组件(自定义或者第三方的);@H_404_26@
style
支持自定义语言(css/sass/less),默认sass
;@H_404_26@
svelte
,也许后面会改成自研组件式开发框架而不是基于React
。@H_404_26@
{ test: /\.lesx$/,loader: 'lesx-loader',query: { loaders: { js: 'babel',css: 'style!css',sass: 'style!css!sass' },uiLib: { libName: 'antd',libDirectory: 'lib' } } }