@appshell/runtime

中文文档
1.0.0-alpha.148发布于 2026/10/30MITTypeScriptCommonJS零依赖构建来源已验证近 30 天下载 6884

提供软件包运行时配置的共享单通

中文使用文档
文档目录5 节
  1. @appshell/runtime/vars
  2. 合同
  3. 组成: getRemotes 财务报告和审定财务报表 getBasePath
  4. 这能做什么,不能做什么
  5. 设置

@ 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 当软件包省略时, 构建失败 .

版本与发布记录

@appshell/runtime 共发布 131 个版本,首次发布于 2026/08/27;过去 12 个月发布了 131 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.0-alpha.148latest2026/10/309 天前
1.0.0-alpha.1472026/10/2910 天前
1.0.0-alpha.1462026/10/2810 天前
1.0.0-alpha.1452026/10/2810 天前
1.0.0-alpha.1442026/10/2712 天前
1.0.0-alpha.1432026/10/2613 天前

关于 @appshell/runtime 的常见问题

@appshell/runtime 是什么?

提供软件包运行时配置的共享单通

如何安装 @appshell/runtime?

在项目目录运行 npm install @appshell/runtime,或使用 pnpm add / yarn add / bun add。

@appshell/runtime 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@appshell/runtime 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@appshell/runtime 可以商用吗?

@appshell/runtime 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@appshell/runtime 的下载量有多少?

根据 npm 官方下载统计,@appshell/runtime 在 2026/10/07 – 2026/11/05 这 30 天内被下载 6,884 次,日均约 229 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@appshell/runtime 还在维护吗?

最新版本 1.0.0-alpha.148 发布于 2026/10/30(9 天前);至今共发布 131 个版本,其中过去 12 个月发布了 131 个;首次发布于 2026/08/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。