@ethisyscore/vite-plugin

中文文档
1.167.0发布于 2026/10/25SEE LICENSE IN LICENSETypeScriptESM + CJS近 30 天下载 7900

Vite plugin for EthisysCore Contract A plugins: manifest-driven HTML entry points (legacy iframe mode) plus build-time SDUI/ReactiveRule schema validation and declarative-resource emission.

此软件包已被标记为弃用

This package has moved to the Ethisys Core package feed. In Ethisys Core, open the Developers page and follow the setup steps (cc login connects npm to the feed).

原始使用文档
文档目录5 节
  1. Export surface
  2. Typical usage
  3. How generatePlatformReactManifest resolves a useView name
  4. Retired SDK packages
  5. Build and test

@ethisyscore/vite-plugin

The Vite plugin collection for EthisysCore plugin-side builds. It provides the build passes for every UI render mode the platform supports — manifest-driven HTML entries, Contract A SDUI schema validation and emission, the Contract B worker bundle, the PlatformReact multi-page bundle orchestrator, and the Tier U iframe-sandbox pass — plus the codegen that derives manifests from a plugin's routeMeta.json.

For the render-mode / trust-tier overview see the top-level README. For the per-contract authoring walkthroughs see docs/authoring/.

Export surface

Each Vite plugin factory returns a standard Vite Plugin; wire the one(s) that match your render mode into vite.config.ts.

ExportPurpose
ethisysContractAPluginContract A pass — validates the SDUI tree against the closed vocabulary and emits declarative resources / reactive rules at build time
validateDeclarativeResource, validateReactiveRuleStandalone SDUI + reactive-rule validators (ValidationResult / ValidationFailure) for tests and tooling
ethisysContractBPluginContract B pass — emits the Web Worker bundle and its import map (CONTRACT_B_SEMANTIC_PRIMITIVES, CONTRACT_B_RUNTIME_IMPORTS, CONTRACT_B_IMPORT_MAP_ALLOWLIST)
ethisysPlatformReactPluginPlatformReact pass — builds one ESM bundle per declared page
buildPlatformReactPages, rewriteAliasedExternalImports, virtualPageEntryMulti-bundle orchestrator: one isolated Vite sub-build per page, with host-externals dedupe (PLATFORM_REACT_EXTERNALS, PLATFORM_REACT_DEDUPE) and host-loader import rewriting
generatePlatformReactManifest, computePlatformReactPagesBuild-step codegen — derive feature.manifest.json + the extension.manifest.json overlay from routeMeta.json
parseExportedNamesThe runtime-named exports of one module's source text — how the codegen resolves a view whose exported name differs from its filename
parsePlatformReactPagesTest helper for snapshot-testing PlatformReact page declarations
ethisysIframeSandboxPlugin, buildIframeSandboxPagesTier U iframe-sandbox pass — cross-origin sandboxed pages with SHA-256 digest emission
ethisysManifestPluginLegacy manifest-driven pass — auto-generates index.html for pages/surfaces that declare a source field

Typical usage

// vite.config.ts for a PlatformReact plugin
import { defineConfig } from "vite";
import { ethisysPlatformReactPlugin } from "@ethisyscore/vite-plugin";

export default defineConfig({
  plugins: [ethisysPlatformReactPlugin({ /* manifest + page options */ })],
});

Most plugins never call these directly — cc package drives the correct pass for the plugin's declared render mode. Reach for the factories when you maintain a bespoke build or need the validators/codegen in tests.

How generatePlatformReactManifest resolves a useView name

Each page's useView("<module>", "<Name>") call becomes one entry of that page's views map, and build-pages wires it with a named import (import { <Name> } from "<adapter module>"). <Name> is resolved against the adapter tree in this order:

  1. By filename — an adapter file whose basename is <Name> (e.g. CompanyCostsView → src/adapter/finance/CompanyCostsView.tsx). This is the original and still the winning rule, so a plugin that follows the filename convention resolves exactly as it always has.

  2. By exported name — otherwise, the single adapter file that exports <Name>. An adapter file may legitimately export its component under a name other than its filename:

    // src/adapter/chat/ChatChannelCreateFormView.tsx
    export function ChatChannelCreateFormView(/* … */) { /* … */ }
    export { ChatChannelCreateFormView as ChatChannelCreateForm };
    

    useView("chat", "ChatChannelCreateForm") is correct at runtime, and now generates. export function|const|let|var|class X, export { X }, export { X as Y } and export { X } from "…" all count.

    export default … deliberately does not — a default export cannot satisfy a named import — and neither do type-only exports (export type / export interface), which are erased at runtime. export * from "…" is out of reach of the scan, so a view reachable only that way still reports as unresolvable rather than being mis-resolved.

  3. Two files export the same name → the generator fails, naming every candidate. Picking one would compile and then render the wrong component. Give the intended file that basename (rule 1 always wins) or rename the view.

  4. Nothing matches → the generator fails (unless strict: false). This error is the point of the pass: useView is a manifest lookup, not an import, so an unsatisfiable call renders "View not available" at runtime behind a green build.

Retired SDK packages

The PlatformReact build refuses an import of a retired SDK package, naming the file and the fix (RETIRED_SDK_PACKAGES, rejectRetiredSdkPackages). @ethisyscore/core-utils is the first: run

npx ethisyscore-migrate-core-utils            # in the plugin's UI folder; --dry-run to preview
npm install

It rewrites every core-utils import (organisation formatting to @ethisyscore/plugin-ui/org-format, everything else to @ethisyscore/foundation-utils at the same sub-path) and swaps the dependency in package.json. See migrating off core-utils.

Build and test

npm ci && npm run build && npm test

Last Updated: 2026-07-10

版本与发布记录

@ethisyscore/vite-plugin 共发布 314 个版本,首次发布于 2026/03/21;过去 12 个月发布了 314 个版本。

版本发布日期距今
1.167.0latest2026/10/2520 天前
1.166.02026/10/2420 天前
1.165.02026/10/2420 天前
1.164.02026/10/2321 天前
1.163.32026/10/2321 天前
1.163.22026/10/2321 天前

关于 @ethisyscore/vite-plugin 的常见问题

@ethisyscore/vite-plugin 是什么?

Vite plugin for EthisysCore Contract A plugins: manifest-driven HTML entry points (legacy iframe mode) plus build-time SDUI/ReactiveRule schema validation and declarative-resource emission.注意:该包已被作者标记为弃用——This package has moved to the Ethisys Core package feed. In Ethisys Core, open the Developers page and follow the setup steps (cc login connects npm to the feed).

如何安装 @ethisyscore/vite-plugin?

在项目目录运行 npm install @ethisyscore/vite-plugin,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:vite(^8.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 ethisyscore-migrate-core-utils,可以用 npx ethisyscore-migrate-core-utils 直接运行。

@ethisyscore/vite-plugin 支持 TypeScript 吗?

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

@ethisyscore/vite-plugin 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@ethisyscore/vite-plugin 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ethisyscore/vite-plugin 可以商用吗?

@ethisyscore/vite-plugin 使用 SEE LICENSE IN LICENSE 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@ethisyscore/vite-plugin 的下载量有多少?

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

@ethisyscore/vite-plugin 还在维护吗?

最新版本 1.167.0 发布于 2026/10/25(20 天前);至今共发布 314 个版本,其中过去 12 个月发布了 314 个;首次发布于 2026/03/21。作者已将其标记为弃用,新项目建议寻找替代方案。