baidu/san-ssr

支持 noReverse

Closed this issue · 1 comments

目前 san-ssr 中有部分逻辑支持了“san 作为模板引擎使用”。但实现很不一致,主要包括两个功能:

  1. noTemplateOutput 支持不输出顶层 Template #34
    • 目前已经有 san 核心提供的机制来解决 #53 #59,这个开关不需要了。
    • 但 fragment 会引入一个 <!--s-frag--> 标记,当模板引擎使用时需要一个开关来干掉它。
  2. noDataOutput(运行时参数)还被用来控制是否输出 <!--s-text-->。这是此前的错误设计,不输出数据不意味着不反解(数据可以不从 DOM 上来)。

现在提出一个新的开关 noReverse,默认为 false。为 true 时不输出任何反解用途的标记(基本都是注释)。由于干掉了 noTemplateOutput,对使用者而言是一个 BREAKING CHANGE。需要做下面的事情:

  1. noTemplateOutput=true 替换为 noReverse=true
  2. 根据 #53 ,把不需要输出的 template 改成了 fragment
  3. 如果你没用过 noTemplateOutput,但不希望输出 <!--s-text-->,此前是用 noDataOutput 控制的,现在需要设置 noReverse=true

下面说明一下“san 作为模板引擎使用”的几个有用场景:

  1. 历史代码迁移。从其他非 HTML 安全的模板引擎迁移到 san 时,存在大量的 HTML 内容拼接,比如 JS 代码拼接(从模板数据生成 JS 代码中的变量)。noReverse 可以让这些代码可以平迁。
  2. 拼接 pre、code、textarea 等类型的内容时,也需要支持不输出反解注释。

经线下讨论,参数名由 noReverse 改为 ssrOnly。