alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.66k stars 2.55k forks source link

「讨论」引擎内的模板字符串格式 #1696

Closed LeoYuan closed 1 year ago

LeoYuan commented 1 year ago

https://github.com/alibaba/lowcode-engine/pull/1674 引发的调研和思考~

PR 中认为模板字符串是类似 我是 {name},由 {} 包裹的即为插槽, 看了下 Demo 预览,认可的是 {},看了下出码,认可的是 ${},查看 协议 发现前面写的是 {},后面写的是 ${},大水冲了龙王庙了。。。

于是去调研了一下哪种更好,有如下事实:

到底使用哪种好,我想(yiyin)无非是平衡 易用性功能性,比如是用一百个前后花括号 {{...{{name}}..}} 是不容易跟内容混淆的,但是不易用,使用简单标识,如: (name) 很简单,但是容易跟内容的括号产生冲突,需要用转义等方式才能更好的输出括号,所以业界在权衡两者后,出现了 <%= %> / {{}} / ${} 等多种流行方案。

我个人倾向是使用 ${},大家觉得呢?

flgame commented 1 year ago

${}

wangzhenxi commented 1 year ago

我不推荐${}的原因是:

个人倾向{}:

LeoYuan commented 1 year ago

我不推荐${}的原因是:

  • 在模板字符串中使用 ${} 时,需要注意表达式的安全性,特别是当表达式包含用户输入时。
  • 可读性相对弱些

个人倾向{}:

  • 可读性强些
  • 易用性不用过多考虑,{}符号的诞生本来就是用于计算机、数学领域,普通文案基本没人用。

安全性是指?这里不会涉及 `` 带来的计算行为的,只是一个占位符。

{} 还是容易出现的,如上所言,如何选择是综合易用性和功能性来判断,不然为啥主流模板引擎没人用 {}?

fantasysango commented 1 year ago

作为曾经hbs重度使用者,当然是{{}}了,看着就亲切 XD

AndyJinSS commented 1 year ago

${}

beautiful-boyyy commented 1 year ago

1, 2, 4大家不一定用过,3大家都了解,没有特别的需要当然就3咯,引擎能简单点就简单点。

LeoYuan commented 1 year ago

@eternalsky @alvarto @liujuping 你们也给点建议?

liujuping commented 1 year ago

需要考虑一下修改是否 breaking,因为开源以来支持的就是 {} 类型,所以建议默认还是保持 {}。

如果要考虑其他的类型支持,可以通过新增配置,例如 lodash 的 interpolate。

// Use custom template delimiters.
_.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
var compiled = _.template('hello {{ user }}!');
compiled({ 'user': 'mustache' });
// => 'hello mustache!'

如果修改成默认其他的类型,比如 ${},为了兼容,还需要保持 {} 的兼容支持,这种情况下冲突的问题也不能解决。

LeoYuan commented 1 year ago

所以确认是用{}么?😃

@liujuping

LeoYuan commented 1 year ago

https://github.com/alibaba/lowcode-engine/pull/1826/files