前端早读精选:oclif 工具指南、CSS 处理文档溢出、你应该知道的 HTML Dom 与节点属性差异

133 阅读8分钟

post-header-bg.png

探索前端技术的无尽旅程从这里开始!每周精选前端领域的热门文章。

文章推荐:oclif 一款 cli 框架的使用指南,带你快速搭建一款属于你自己的 CLI 工具、HTML Dom 属性与节点属性之间的区别,以及各大框架是如何处理的、两篇关于 CSS 魔法:1)利用 CSS 实现对文档溢出处理;2)利用 CSS 的 grid 布局绘制出一款乐谱

工具推荐:AI 集成工具 -- MaxAi.me。一键快速使用各类 AI 工具

行业新闻:Bun 1.1 发布、Node V22 版本发布,快来看看它们的新特性吧

如果觉得有收获,欢迎大家点赞👍🏻订阅

文章推荐

oclif 工具指南

这篇文章是一篇教程,在不使用 oclif 的脚手架的情况下,如何搭建一个使用 oclif 搭建一个命令行工具。文章从设置项目、初始化目录、配置 TypeScript 编译器的步骤,并通过创建和扩展 oclif 的 Command 类来展示如何添加命令、参数和标志 介绍了如何使用 TypeScript 和 oclif 框架从头开始构建一个命令行接口(CLI)应用程序。

附:cli 框架对比

特性/框架oclifCommander.jsCaporal.js
主要优点强大的插件系统,功能丰富简单直观,易于上手参数验证,支持多语言
主要缺点相对复杂,学习成本较高子命令处理基础社区较小,文档支持有限
社区和维护由 Heroku 和 Salesforce 维护,社区活跃社区非常活跃,维护良好社区较小,更新可能不频繁
适用场景大型、模块化的应用,需要可扩展性快速开发简单到中等复杂度的 CLI 工具需要内置参数验证和国际化支持的应用
自动化帮助支持支持支持
性能较重,不适合轻量级应用性能良好,适合大多数应用性能适中

oclif.png

👉🏻原文链接: oclif 工具指南

HTML属性 VS DOM属性

文章详细讲解了HTML属性和DOM属性的区别,这是Web开发中的基本概念,但经常被误解。以下是文章的几个关键点总结:

  • 属性与属性的区别:HTML属性是直接在HTML中定义的,总是字符串形式,而DOM属性是DOM对象模型的一部分,可以是任何类型。属性在HTML标记中可见,但属性通过JavaScript以编程方式访问。
  • 序列化与大小写敏感性:属性可以序列化到HTML中,即它们可以在标记中被看到,并且它们是不区分大小写的。相反,属性不会序列化到HTML中并且是区分大小写的。
  • Reflection:某些属性在更改时会自动更新其相应的属性,反之亦然。但这并不总是如此,有些属性的更改不会反映到属性上。
  • 验证、类型强制和默认值:属性可以强制执行验证规则和类型,自动将值转换为适当的类型或默认值。例如,如果为元素的类型属性设置了非有效类型,它将恢复为默认的有效类型。
  • 框架和自定义元素:文章还讨论了不同的JavaScript框架如何处理属性和属性之间的区别。例如,React和Vue等框架在将组件渲染为字符串或处理自定义元素时,有特定的处理方式。
    • Preact 和 VueJS:通常优先将属性设置为DOM属性,除非属性名不是元素的已知属性,这种情况下才设置为HTML属性。在服务器端渲染时,它们倾向于只处理HTML属性。
    • React:React的默认策略是将大多数属性设置为HTML属性,除非这些属性被预定义为DOM属性。这种方式影响了自定义元素的功能实现,因为它们的属性可能不被识别为DOM属性。
    • lit-html:要求开发者在设置DOM属性时,在属性名前加上点(.),如.value,以明确区分HTML属性和DOM属性。

attr.png

👉🏻原文链接: HTML属性 VS DOM属性

纯 CSS 检测文本是否溢出

本文介绍了一种通过CSS滚动驱动动画和CSS样式查询实现文本溢出检测的技术方案。首先,使用CSS滚动驱动动画标识容器是否溢出的方法包括在容器内部设置动画,该动画与滚动事件相关联。具体实现方式是通过定义animation-timeline属性来依赖于容器本身的滚动状态,例如使用scroll(self)表示监听容器自身的滚动。当容器滚动时,动画被触发,通过动画中的关键帧更改如颜色等属性,可以视觉上标识出容器是否发生了溢出。一旦容器被识别为溢出,CSS样式查询(即容器查询)则用于进一步定制不同状态下的样式。例如,可以在检测到容器溢出时,使用@container规则来应用特定的样式变更,这些变更仅在满足特定条件(如文本溢出)时才生效。这种查询可以指定基于容器内部状态的样式,如在CSS中设置变量--trunc,然后在容器查询中检测这个变量的值,如果为真(表示溢出),则可以调整子元素的显示,比如显示“展开”按钮或改变背景色等。

image.png

👉🏻原文链接: 纯 CSS 检测文本是否溢出

使用 CSS 绘制乐谱

这篇文章详细介绍了使用CSS Grid来绘制网页上的音乐谱的方法。作者通过将音乐谱的每个部分(如五线谱、小节和音符)视为网格系统中的元素,利用CSS的属性来精确控制这些元素的布局和样式。文章中展示了如何定义CSS类和网格布局,以实现五线谱的横向和纵向对齐,以及如何使用CSS属性来调整音符的位置和大小。

music.png

👉🏻原文链接: 使用 CSS 绘制乐谱

工具推荐

MaxAi.me

可以在任何地方一键使用 AI,由ChatGPT、Claude 3、Gemini 1.5和GPT-4提供支持。您唯一需要的生成式AI扩展

行业新闻

Bun 1.1 发布

Bun 1.1 版本正式发布了,这是一个重大版本更新,进一步优化了这个高速的 JavaScript 运行时和工具集。以下是这个版本的简单概述:

  • 性能提升:bun install 在 Windows 上的安装速度提升了50%,通过并行化文件复制和链接操作实现更快的性能​ (Bun)​。
  • 新特性和API支持
    • 对 Date.parse() 函数进行了改进,以兼容 Node.js 的行为,解决了日期解析在不同 JavaScript 引擎间的不一致问题​ (Bun)​。
    • 增加了对递归文件目录读取的支持,并显著提升了 fs.readdir() 的性能,使其比 Node.js 快22倍​ (Bun)​。
  • Bug修复和稳定性改进
    • 解决了多个与 Bun Shell、fs.watch、和 bun build --compile 相关的bug,包括修正 bun build --compile 未正确处理输出文件路径的问题​ (Bun)​​ (Bun)​​ (Bun)​。
    • 改善了 Bun 在处理带有无效文件路径的 tarballs 时的行为,现在与 Windows 上的 npm install 行为一致​ (Bun)​。
    • 修复了使用 SvelteKit 时 fetch 方法的错误处理问题,确保正确调用重写的方法和属性​ (Bun)​。
  • 跨平台和模块改进
    • 提升了 Array#sort 方法的性能,根据不同场景可提升 15% 至 135%​ (Bun)​。
    • 在 Bun for Windows 上修正了退出时重置控制台模式的问题,解决了在命令提示符中使用方向键可能出现的问题​ (Bun)​。
  • 与 Node.js 的兼容性:增强了与 Node.js 的互操作性,包括支持 IPC 消息传递和解决了一些 Node.js 未文档化 API 的问题​ (Bun)​。

image.png

👉🏻 更多更新日志请看看原文链接:Bun 1.1 发布

NodeJS 22 发布

Node V22 版本正式发布了,新版本引入了几项重要的新特性和更新,旨在提高性能、增强安全性,并支持更现代的 JavaScript 功能。以下是这个版本的简单概述:

  • V8 引擎更新:Node.js 22 更新了其 V8 JavaScript 引擎到最新版本,带来了性能改进和对新的 ECMAScript 特性的支持。
  • 性能优化:此版本包括对 Node.js 核心部分的性能优化,例如模块加载和 HTTP 处理。
  • 新的和改进的 API
    • 引入了对新的 ECMAScript 模块(ESM)加载器的支持,这些加载器现在可以在一个独立的线程中运行,从而避免干扰主线程。
    • 提供了更多控制文件系统访问的功能,包括读写权限的细粒度控制。
    • 强化了对 WebAssembly 和 Web Crypto API 的支持,使 Node.js 在处理网络安全和性能敏感型任务时更为有效。
  • 实验性功能:引入了一些新的实验性功能,如单一可执行应用的支持,这可能在未来版本中成为稳定功能。
  • 安全性增强:包括对特定安全性能的改进,如改进的错误处理和更新的安全协议支持。

image.png

👉🏻 更多更新日志请看看原文链接:NodeJS 22 发布