2024.01.15前端周刊

72 阅读3分钟

本专栏(FE weekly news)文章随缘更新,由于精力有限,每篇周报的内容可能不多,欢迎大家关注

新闻

1. 2023 JavaScript Rising Stars新鲜出炉

新一年的Rising Stars统计结果发布啦!

  1. 综合来看Star增长最快项目是shadcn/ui,它是基于Radixtailwindcss实现的组件集合。我们可以通过简单的命令来将指定shadcn/ui组件集成在我们项目中,组件代码将直接被拷贝在我们的项目中,就好像我们自己写的一样,这让开发者可以更方便的对组件定制化。
  2. 在前端框架中,React的Star增速遥遥领先于其他框架,除此之外htmx增速位居第二,该框架旨在让用户以html的语义写代码,通过js实现了各种html扩展。使用htmx的过程就仿佛在使用升级版的html。具体可以看第二条新闻。
  3. 在React生态中,增速最快的shadcn/ui就不多说了,增速第二的Excalidraw是一个手绘风格的画板,画板支持生成各种手绘风格的图片。
  4. Vue生态中,增速第一的是Nuxt,增速第二的Slidev 是一个可以用markdown写ppt的工具,但是我试了下,感觉功能还不稳定,而且还要学习各种语法,目前而言,让我用这个写ppt的话——达咩。
  5. 移动端中,增速第一的Expo是一个基于React Native实现的跨平台框架,相比React Native,Expo提供了更好的开发体验以及多端兼容性适配。一次开发可以同时满足安卓、IOS和web端。

2. Is htmx Just Another JavaScript Framework?

发布在htmx官网上的一篇文章,回应了开发者对于htmx的一些质疑(比如htmx到底是框架还是库?htmx的优势到底在哪里?),文章的作者认为,htmx是一个框架,但它是一个遵守html语义的框架,开发者使用htmx的过程其实就是使用html的过程,而不是像vue、react一样,要学他的各种与html无关的语法。用一张图来表示的话:

图片名称

文章

33 JavaScript concepts every developer should know.

里面列出了开发者需要掌握的33个概念,如果你想给自己找点事情做的话,不妨对照着该文章,夯实一下自己的js基础。

工具

一个现代文件API—— fsx

这是一个对标fs的文件系统API,据作者自述,他受够了市场上现有的文件系统API,觉得它们都非常极其特别难用且过时,所以才有了自己写一套的想法,fsx由此诞生。

文章我没全看,大概挑着说一下该文件系统的功能吧。

  1. 读文件

    fsx在读文件时可以指定返回格式,并且当文件不存在时,不会像其他api一样throw error,而是返回undefined。

    // read plain text
    const text = await fsx.text("/path/to/file.txt") ?? "default value";
    
    // read JSON
    const json = await fsx.json("/path/to/file.json") ?? {};
    
    // read bytes
    const bytes = await fsx.arrayBuffer("/path/to/file.png") ?? new ArrayBuffer(16);
    
  2. 写文件

    fsx写文件API支持两个参数;

    • filePath:string-文件路径

    • value:string|ArrayBuffer- 写入的内容

      当文件路径不存在时,fsx不会像其他API一样报异常,而是会自动创建对应的路径&文件。

      // write a string
      await fsx.write("/path/to/file.txt", "Hello world!");
      
      const bytes = new TextEncoder().encode("Hello world!").buffer;
      
      // write a buffer
      await fsx.write("/path/to/file.txt", bytes);
      
  3. 检测文件是否存在

      // 存在则返回true,不存在返回false,而非像fs.stat一样不存在就throw error
      if (await fsx.isFile("/path/to/file.txt")) {
          // handle the file
      }
    
  4. 删除文件

    fsx中文件和目录都可以删除

     // delete a file
     await fsx.delete("/path/to/file.txt");
    
     // delete a directory(目录不为空会将目录中的内容也全部删除)
     await fsx.delete("/path/to");