WU / 文档通用微前端
中文

渐进式 SSR 与 Trusted Types

使用声明式 Shadow DOM 流式交付应用,并配置 CSP 与 HTML 策略。

本页介绍 WU Framework 4.0.0。升级现有项目之前,请阅读 Framework 4.0 与 CLI 1.2 迁移指南。

按应用流式输出

import { renderAppsStream, streamToString, createNonce,
  securityHeaders } from 'wu-framework/server';

const nonce = createNonce();
const headers = securityHeaders({ nonce, https: false });
const stream = renderAppsStream([
  { name: 'summary', module: { render: async () => ({
    html: '<p>Summary ready</p>', styles: 'p { color: teal }',
    state: { ready: true },
  }) } },
  { name: 'details', module: { render: async () => '<p>Details ready</p>' } },
], {
  order: 'ready', nonce,
  head: '<!doctype html><html lang="en"><head><title>WU stream</title></head><body>',
  tail: '</body></html>',
  onError: ({ app, error }) => console.error(app, error),
});

// Fetch-compatible server handler: return this Response.
const response = new Response(stream, { headers: {
  ...headers, 'Content-Type': 'text/html; charset=utf-8',
} });
// Tests may consume a fresh stream with await streamToString(stream).

Renders 启动到 concurrency 限制为止;无限制时一起启动。order: "document" 按顺序交付应用,无需脚本调整位置。order: "ready" 在每个应用完成时交付,保留 placeholders,并要求为移动已解析节点的脚本提供 nonce。流式单位是整个应用,而非 renderer 的每个组件。streamToString 会消费流,之后不要尝试再次读取。

state: false 省略末尾状态脚本,stateVarName 修改其名称。启用 failFast: true 时,错误会中止流;默认保留占位并调用 onError。要实现交互,需连接客户端模块与水合生命周期,服务端 HTML 本身不会挂载客户端渲染器。renderReact 根据已安装 React DOM 的 API 支持 auto、static 与 string。

HTML 策略与 CSP

服务端可通过 securityHeaders({ nonce, trustedTypes: true }) 生成相应指令。trustedTypes 数组会替换允许的策略列表。每次响应使用新的 nonce,并在该响应的头部、样式与脚本中使用同一值。生产环境应配置 HTTPS 和宿主实际需要的源。

import { wu } from 'wu-framework';
await wu.init({ trustedTypes: 'sanitize', apps: [] });

true 与 "sanitize" 安装使用 WU 清理器的默认 HTML 策略。"report" 仅记录写入而不清理,应仅用于诊断。"strict" 拒绝未经封装的字符串。WU 会尊重已有默认策略。这些策略不提供 JavaScript 隔离,也不授予远程资源访问权限,不能替代授权与应用数据验证。

配置 signal、timeout 和 concurrency 以限制流的工作。SSR 参考介绍取消、私有 loaders 和 createServerRequest 生命周期。

一起完善 WU

发现了问题?有新的想法?

你的使用体验能让 WU 变得更好。告诉我们遇到的问题,或支持项目的持续开发。