为什么 Preact 在 Grid.js 中应该处于 prod 依赖关系?

问题描述 投票:0回答:1

我一直在审查一些讨论,例如 this one,这表明

React
通常应放置为产品依赖项。但是,我不确定同样的考虑是否适用于
Preact

根据 Grid.js 官方网站,他们特别提到

preact
是他们使用的唯一外部依赖项,强调了这个选择的重要性。

以我的理解,如果我想在包中维护

Preact
的上下文关系,并且如果我打算通过
useEffect
导出
useCallback
useState
useRef
index.ts
等各种钩子,我是否仍应将
Preact
视为外部依赖项?或者我是否可以将
Preact
仅归类为开发依赖项,特别是考虑到我利用
Rollup
来捆绑 UMD 和 ESM 格式,并且
Preact
包含在生成的 JS 文件中?

我正在寻求澄清是否可以或应该以某种方式对

Preact
进行分类,以实现高效可靠的设置。任何见解或建议将不胜感激!

typescript rollupjs preact
1个回答
0
投票

首先,我是一名 Preact 维护者,在构建工具方面做了很多工作,包括 gridjs 用于构建的工具(微包)。

依赖管理非常复杂,并且没有一种正确的方法可以做到这一点。不同的情况需要不同的配置,因此您必须选择要支持的情况并从那里开始工作。

但是对您的链接的一些评论:

  • React 帖子相当有缺陷,因为没有人指定该项目是一个库还是一个应用程序
    • 使用 apps 时,
      dependencies
      devDependencies
      几乎完全无关。唯一的好处是,如果您将
      devDependencies
      限制为仅可选工具,例如潜在的 linter、格式化程序等,这样您就可以跳过在 CI 上安装它们。然而,这种情况非常罕见,因为大多数人都会将 lint 步骤作为其 CI 流程的一部分,这意味着仍然需要这些 deps。
    • 但是,库将根据目标用途而有所不同,但没有人指定
  • 虽然 gridjs 将 Preact 列为依赖项,但我不确定它应该吗?
    • 只简单浏览了一下,但看起来到处都是内联Preact;因此,没有必要将其列为依赖项。

如果您想制作包装,需要考虑以下几点:

  • 这仅适用于其他 Preact 项目吗?
    • 如果是这样,您想要的是将 Preact 指定为
      peerDependency
      。这允许 Preact 项目带来自己的 Preact 副本,然后您的库也将使用它。因此,消费者拥有并可以根据需要更改 Preact 版本。
  • 这是否意味着完全独立?
    • 如果是这样,您可能需要 inline Preact,这就是 gridjs 通过 Microbundle 的
      --no external
      选项所做的事情
    • 但是请记住,这会锁定 Preact 版本!如果 Preact 中存在已修复的错误,您必须发布项目的新版本才能为用户提供修复。
  • 这是否允许在其他 Preact 项目中使用?
    • React 和 Preact 中的 Hooks 在设计上都有点挑剔。它们不能很好地同时激活多个库副本(React 或 Preact)。因此,如果用户想要在其 Preact 应用程序中使用您的库,则将 Preact 内联到您的库中可能会破坏用户,因为您的库除了他们应用程序已有的副本之外还添加了一个副本。
  • 您希望它在什么环境下工作?
    • 像 unpkg.com 或 esm.sh 这样的 CDN 的行为与 NPM 不同。您想要哪种行为取决于您将库发布到的位置。
    • 例如,NPM 默认安装对等依赖项(如果您尚未安装)。另一方面,esm.sh 则不然。

但是,重要的是,您可以选择一些相互冲突的选项。 包导出允许您定义子模块,例如,可以是库的非常不同的版本。也许

my-lib/widget
是一个一体化捆绑包,适合那些想要将您的库嵌入到他们的网站上的人,其中
my-lib
是一个普通的库,意味着更多可以通过 NPM 使用。


希望这作为一般建议有用。 StackOverflow 可能不是就您的具体情况进行长时间反复讨论并提供示例的最佳场所,因此,如果您愿意,请随时在 Preact slack 中向我发送信息,否则,我可以尽力在这里做出回应可以通过评论。

© www.soinside.com 2019 - 2024. All rights reserved.