如何设计可用于多个项目的 svelte 组件?

How do I design a svelte component to be available in multiple projects?

我正在 svelte/typescript 中构建两个 Web 应用程序:

我想在编辑器(站点 B 中)中使用相同的“视图组件”(来自站点 A),但要附加一些编辑器逻辑,以便在没有代码重复的情况下构建所见即所得的体验。

我当然可以让站点 A 和站点 B 成为同一个 svelte 应用程序的一部分,但我不希望站点 A 的访问者加载站点 B 中使用的所有模块和代码。

我应该如何设计它来避免代码重复,同时仍然防止站点 B 的逻辑泄漏到站点 A?

假设您有一个单独的项目文件夹 A 和 B,然后您将共享组件放入 shared-folder,它与 A 和 B 是同级的。
当您将共享组件导入到 A 时,您只需为导入提供一个正确的路径,例如 ../shared/Comp.svelte。当您构建项目时,bundle.js 将仅包含所需的组件。

最好的解决方案是创建一个 design system:

A design system is a collection of reusable components, guided by clear standards, that can be assembled together to build any number of applications.

实现只不过是创建一个 npm 包。首先,您将创建包含所有组件(ButtonCard、...)的 design-system 存储库。然后你将把它们全部导出到一个 index.js 文件中:

export { Button } from 'path/to/component/Button';
export { Card } from 'path/to/component/Card';
...

然后你捆绑你的 design-system 并创建一个 npm 包,作为生成的 index.js 文件作为入口。

然后在您的不同应用中从这个包中导入组件:

import { Button } from 'my-design-system';