@ appshell/ 运行时间
提供软件包运行时配置的商店( Namevars对它.
这是一个 共享单子。每页有确切的一例
模块联合会共享范围,主机和每个软件包都必须宣布为
这样的。 换了 window.__appshell_vars__<scope>。 。 。 .
多数软件包不应直接导入 – 使用 @appshell/runtime/vars 如下,
供你们观察.
@appshell/runtime/vars
大部分软件包都想要 写着 这个 包的 vars, 没有范围 无法给别人起名:
import { getVars } from '@appshell/runtime/vars';
const { BACKGROUND_COLOR } = getVars<{ BACKGROUND_COLOR: string }>();
这是一种次道,而不是出于某种原因出口主要出口. AppshellPlugin 编译
包的自身范围 任何进口, 主要条目是 共享
模块——整个页的一个实例——所以,在其中烤出一个瞄准镜将是一个
包,和所有其他包 会读错了 vars.
准确匹配的共享密钥 '@appshell/runtime' 没有抓住 '@appshell/runtime/vars', (中文(简体) ),
因此,每个软件包会用自己的范围将访问器的复制件捆绑在一起,而存储器则
他们都伸手 保持一个共享的例子.
getVars 掷出 MissingScopeError 当软件包没有 AppshellPlugin, (中文(简体) ),
因为没有东西能取代范围.
合同
setVars(scope, vars); // the host, immediately before loading a remote
readVars(scope); // a package, reading its own configuration
hasVars(scope); // branch instead of catch
@appshell/loader 电话 setVars 在它装入遥控器之前, 所以一个包的 vars在
放在其模块评价之前——包括在模块检索时间读取.
首个瞄准镜的写法获胜并被冻结. 重新交付相同的 vars 是一个
无操作, 因为同样的遥控器可以挂载不止一次; 替换它们抛出
VarsConflictError。 。 。 .
readVars 掷出 MissingVarsError 而不是返回空对象。 一个软件包
静静地使没有配置的失败被替换.
组成: getRemotes 财务报告和审定财务报表 getBasePath
一个容器需要从页面上展示一个应用程序。 工作空间,为 一,建设其通航和从它们出发的航道:
import { getBasePath, getRemotes } from '@appshell/runtime';
// Every activated remote, keyed as RemoteSlot mounts it (`scope/package/Component`),
// with the metadata its package published.
const remotes = getRemotes<{ route?: string; displayName?: string }>();
// The path the application is served under, for the router's base.
const basename = getBasePath();
他们把登记册的构成 印入页面 并揭露这两个
仅部分:一个包的 vars 通过了 @appshell/runtime/vars,其余的则
弹壳是有效载荷.
Appshell从不读取元数据,所以它的密钥是所有容器读取的
定义。 您通过的类型 getRemotes 未选中, 请验证您所读的 .
都抛出 MissingCompositionError 在没有构成的一页上,而不是
返回一个空列表,该列表将使导航中没有任何内容。 在测试中,
设定 window.__appshell_config__ 您想要的构成.
这能做什么,不能做什么
相对于它所取代的全球,它修正了:无约束的、永不清理的密钥;无声的 横包覆盖; 主机和远程之间的负载顺序耦合;以及 未打出又无法发现.
这个 不使一个瞄准镜的 vars 私自. 页面上的任何代码都可以调用
readVars('SomeOtherScope'),而一个提前装入的包可以蹲入一个瞄准镜上
尚未交付。 没有别的领域——一个框架,一个工人——
这将改变这一点, 并且这些都不是安全边界。 不要把一个秘密
vars; 登记册以两种方式为浏览器服务.
设置
双方宣布,或各自以自己的"空"店告终:
new ModuleFederationPlugin({
shared: {
'@appshell/runtime': { singleton: true },
},
});
AppshellPlugin 当软件包省略时, 构建失败 .