创建我的第一个 JavaScript 库的旅程是变革性的,帮助我成长。我是怎么到这里的?让我们从头开始吧。
完成 UnifyUI Blocks 和 Flexiwind Blocks 的测试版后,我和我的朋友面临着一个挑战:添加下拉菜单、折叠和选项卡等交互式组件。
由于 UnifyUI 和 Flexiwind 不同:一个使用 UnoCSS,另一个使用 TailwindCSS,我们最初为两者编写单独的脚本。但很快我们就发现这不是一个理想的解决方案。
在研究了 Preline 如何处理与为 TailwindCSS 定制的专用 JavaScript 插件的交互后,我们发现需要一个与 CSS 框架无关的解决方案。
创建一个与 CSS 框架无关的库对我们来说至关重要,因为我们希望 Flexilla 能够与任何 CSS 框架甚至与纯 CSS无缝协作。许多开发人员,包括使用 UnoCSS、TailwindCSS 甚至 Bootstrap 的开发人员,应该能够灵活地不受限制地增强其组件。
通过使 Flexilla 独立于特定框架,我们可以提供适用于许多不同类型项目的多功能工具。它还与我们在 UnifyUI 和 Flexiwind Blocks 上所做的工作保持一致,其中灵活性是关键。
受到 Preline 和 Flowbite 插件的启发,我们决定创建完全开源的 Flexilla。
Flexilla 是一个独立的库,旨在独立管理交互,而不依赖于任何特定的 CSS 框架。它提供了与 TailwindCSS、UnoCSS 或任何其他 CSS 技术顺利集成的灵活性。
我们的目标是以不限于特定 CSS 环境的方式增强组件。
起初,我不知道从哪里开始。我应该克隆 Preline 并对其进行调整吗?不,那对我没有帮助,因为我的目标是通过这个项目学习。
一开始,我的代码一团糟:不可读且难以理解。
我有一个“packages”文件夹,这是一场灾难!这使得单独发布某些包变得困难,所以我需要一个解决方案。
解决方案
我发现了一篇关于勒纳的文章,立即引起了我的兴趣。经过几天的阅读文档和重组代码后,我拥有了一个令我自豪的组织。 Lerna 允许我简化更新、管理单一存储库中的多个包并独立发布它们。
是的,我面临这样的困境:我是否应该使用 PopperJS?
这是一个巨大的挑战,但我会将这个故事留到以后的文章中。
这是一个主要的绊脚石。我最初以 1.0.0 版本发布了该库及其所有包……发布后,我意识到某些包存在问题。因此,对于每次修复,我都会发布该库及其软件包的新版本。坏主意!最终,一位朋友建议我阅读一篇关于 SEMVER 的文章,突然间,版本控制变得有意义了——尽管我有点晚了。
这就是我最终得到版本 2.x.x 的库的原因。从那时起,我就不再犯这些错误了。有了Lerna,我不再需要担心更改尚未更新的软件包版本; Lerna 帮我处理这件事。
Flexilla 不依赖于任何特定的 CSS 框架,使其与 TailwindCSS、UnoCSS 甚至 plain CSS 兼容。这种灵活性确保您可以将其与您的项目集成,无论您使用什么 CSS 框架。
Flexilla 提供模块化组件,例如下拉菜单、选项卡和折叠。这些组件是轻量级的,易于根据需要添加,因此您只需添加要使用的组件,这有助于性能和捆绑包大小。
该库具有易于使用的 API,只需最少的配置。这是如何设置下拉组件的简单示例:
import { Dropdown } from '@flexilla/flexilla'; Dropdown.init("#myDropdown");
此示例展示了如何仅用几行代码即可快速初始化下拉列表,从而使各个级别的开发人员都可以轻松访问它。
受无头 UI 库的启发,Flexilla 允许您完全控制样式,因此您不受预定义设计或主题的限制。这使得它可以轻松集成到自定义样式的项目并确保它不会与现有样式冲突。
Flexilla 组件附带可自定义事件。例如,您可以添加操作来响应用户操作或自定义特定交互的行为,例如打开下拉列表或选项卡更改时。
const myDropdown = new Dropdown('#myDropdown', { onShow: () => console.log('Dropdown is shown!'), onHide: () => console.log('Dropdown is hidden!'), }); const myAccordionEl = document.querySelector("#myAccordion") const myAccordion = Accordion.init(myAccordionEl) myAccordionEl.addEventListener("change-item",()=>{ console.log("Accordion item changed") })
当您处理的项目不想使用 JavaScript 框架但需要考虑到可访问性的交互式组件时,请使用 Flexilla。 (推荐:AstroJS、PHP 和 PHP 框架、静态网站)
它可以与 VueJS 很好地配合,但不推荐。使用 ReactJS,甚至不要尝试!
Flexilla 将继续发展。我计划添加更多组件,改进现有组件,并完善文档。除了现有的组件之外,我还计划引入其他常见组件,例如通知和 toast。这将使 Flexilla 能够支持更广泛的交互需求。
根据我的需求,Flexilla 已被证明是在我的项目中创建交互式组件的宝贵工具。
开始可能会很可怕。我担心没有人会欣赏我的工作,担心它没有任何作用。但我向你保证,不去尝试是最大的错误。今天,我对创建这个图书馆并不后悔。它让我学到了很多东西:代码组织、版本控制、管理 npm 包……毫不犹豫地与世界分享您的解决方案,并乐于接受反馈,无论是积极的还是消极的。它会帮助你成长!
如果您有想法、建议或代码改进,请立即分叉存储库、提交拉取请求或提出问题。我们可以共同增强库并为世界各地的开发人员创造宝贵的资源。
请注意,别忘了查看 Flexilla 并让我知道您的想法!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3