【前端功能点】字体包压缩

思路

  1. 创建一个前端项目,该项目只需要展示一个页面
  1. 点击提交,会修改font-spider.html这个文件
  2. 修改成功后,执行写好的shell.sh脚本生成压缩后的字体包
  3. 复制出压缩后的字体包使用即可

为什么要这么麻烦?这样做有什么好处?

原因

  1. font-spider 包对html文件中动态生成的文字无法提取,故前端三大框架均不能直接使用
  2. 当然也可以将字体压缩的逻辑放在开发的项目中,但这样的话,项目会感觉很乱,打包配置也要做些修改

好处

  1. 提取成新项目后,属于一个单独的项目,不会影响到业务项目
  2. 全程只有将文字复制到文本框这步算是最复杂的,整体操作简单,有可视化界面
  3. 其他项目也能通用,类似一个工具项目

大致讲下关键逻辑

  1. 点击提交,获取表单数据
  2. 对数据做处理(文字去重)
  3. 利用showOpenFilePicker该api调起文件上传,返回一个Promise,如果用户选了文件会得到文件信息
  4. 拿到文件信息的对象时,再调用文件信息的createWritable方法,该方法也是一个Promise用于创建一个可写流
  5. 将数据写入,并关闭写入流,弹出成功提示
  6. 新的html文件生成后,执行shell.sh文件
  7. 从fonts目录中复制压缩后的字体包即可

一下就是 以上关键逻辑的代码实现

js 复制代码
function submit() {
  const from = document.getElementById("form");
  const formData = new FormData(form);
  const chats = formData.get("words").trim();
  const name = formData.get("word-name").trim();
  let c = "";
  if (chats) {
    new Set(chats.split("")).forEach((v) => {
      c += v;
    });
  }
  if (c) {
    const whireFile = async () => {
      const title = document.getElementById("title");
      title.innerText = "加载中...... 请等待";
      title.style.color = "red";
      const [fileHider] = await window.showOpenFilePicker();
      const file = await fileHider.getFile();
      const writable = await fileHider.createWritable();
      await writable.write(
        `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8" /><title>字蛛-压缩字体包</title><style>@font-face{font-family:${name};src: url("./fonts/${name}.TTF")}</style></head><body><div style="font-family: ${name};">${c}</div></body></html>`
      );
      await writable.close();
      title.innerText = " 字蛛-压缩字体包";
      setTimeout(() => {
        alert("加载完成");
      }, 300);
    };
    whireFile();
  } else {
    alert("请输入有效字符");
  }
}

shell脚本

js 复制代码
#! /bin/bash
echo "hello woild"
# 执行命令
font-spider ./font-spider.html

总结下

相关推荐
沙漠之主10 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
hasty10 小时前
不上传新包,也能改变用户拿到的版本:npm dist-tag 的 OIDC 权限治理
前端·npm·node.js
Csvn11 小时前
diff 算法(虚拟 DOM Reconciliation)
前端
前端snow12 小时前
ai agent --- 文件存储
前端
Frag0ut12 小时前
Chrome四大版本获取及共存指南:Stable/Beta/Dev/Canary
前端·chrome·浏览器·dev·beta·canary·共存版
IT_陈寒13 小时前
SpringBoot自动配置坑了我一把,原来是这样绕过去的
前端·人工智能·后端
广州华水科技13 小时前
单北斗GNSS变形监测在大坝安全监测中的应用与优势
前端
zeng不错14 小时前
B站 173 个投稿活动看到眼瞎?我写了个扩展,主打一个精准打击
前端
Latchh14 小时前
前端导出的JPEG红字发糊,质量要拉到100才清楚
前端·图像处理·人工智能·计算机视觉
默_笙14 小时前
🚦 请三个 AI 考官给 RAG 打分:量化评估实战(下)
前端·javascript