【问题标题】:React Component Library - Is a bundler needed?React 组件库 - 需要打包器吗?
【发布时间】:2021-07-08 14:47:09
【问题描述】:

在创建 React 组件库时是否需要像 rollup 这样的打包工具? IE。如果我只有一个简单的项目,其中包含按钮/复选框等作为 typescript 文件,然后在 npm 上发布,那么运行 tsc 是否会使用适当的配置将其全部转换为 dist 包?

那么 rollup 有什么好处呢?我读到可能是摇树,但是如果 js 文件存在于它们自己的目录中,那么下面不也导入单个组件吗?

Import { Button } from ‘myLibrary/buttons’

【问题讨论】:

    标签: typescript rollupjs


    【解决方案1】:

    您可以使用汇总以获得更广泛的兼容性。

    捆绑器在使用尚未普遍实现的 JavaScript 功能时很有用,因为它们简化了添加构建工具的过程,这些构建工具可以填充/转换现代功能和语法以符合当前实现的 Web 标准。由于您发布的是库而不是 Web 应用程序,因此我认为捆绑程序不太相关,但并非不可能。例如,ES6 模块(importexport)并未得到普遍支持(Typescript 1.5+,Node 13+)。 Rollup 可以确保更通用的兼容性,尤其是在与 Babel 等工具配对时。开箱即用,它内置于"future proof code"

    ...JavaScript 的 ES6 修订版,其中包括用于导入和导出函数和数据的语法,因此它们可以在单独的脚本之间共享。该规范现已修复,但仅在现代浏览器中实现,并未在 Node.js 中最终确定。 Rollup 允许您使用新的模块系统编写代码,然后将其编译回现有支持的格式,例如 CommonJS 模块、AMD 模块和 IIFE 样式的脚本。这意味着您可以编写面向未来的代码...

    请注意,对于 React 库,大多数消费者将满足使用您的库的最低要求,而无需任何捆绑程序转换。

    【讨论】:

    • 我喜欢这个答案,但它让我思考:你会说这与正确使用 tsconfig 中的 target 属性之间的功能区别是什么?如果我可以target 我的代码仅从 tsconfig 编译成 es5,这是否意味着 tsc 在这方面具有与捆绑器相同的能力?
    • Babel 根本不是打包工具
    • @Roberto,我没说是,但谢谢你的澄清。
    • @Seth,也许在这方面,是的。 Rollup 将使您对输出的外观有更多的控制。也就是说,tsc 本身就已经非常通用了。
    • “捆绑器是使用尚未普遍实现的 JavaScript 功能所必需的”这是不正确的。转译器是必要的,但不是捆绑器。但是,捆绑器往往使设置转译器变得容易。
    【解决方案2】:

    简短的回答是否定的,不一定需要捆绑器。

    打包器是一个方便的工具,它可以为您完成大量转译和移动文件的繁琐工作。在您的情况下,如果您有一组简单的 ts 或 tsx 文件,并且您只是想以一对一的方式将它们转换为 js(每个 ts 文件有一个新的 js 文件,同名),您绝对可以只需使用tsc 转译您的文件,将它们输出到某个build 目录,然后发布即可。这是使用 typescript 创建 react 组件库的一种完全有效的方法。

    另一方面,如果事情比 1 到 1 的 ts 到 js 转换更复杂,那么捆绑器可能会派上用场。例如,如果您的库包含其他资源,如样式表、图像、网络工作者文件等,那么 tsc 将无法帮助您。您需要手动将文件复制到构建目录中所需的位置。或者您可以使用捆绑器将它们捆绑在一起归档您。或者,正如另一个答案所提到的,您可能希望使用特定的 babel 转换来实现特定的兼容性,这可以通过捆绑程序轻松配置。你可能想做更多涉及的事情,比如代码分割,或者相反(许多入口文件到一个输出中)——捆绑器可以帮助解决这个问题,tsc 不能。

    我最近发现自己使用捆绑器来制作 React 组件库,但我切换了使用 tsc,因为它是一个简单的场景,而且我更喜欢 typescript 的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2017-10-23
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多