可以使用 Node.js 的 request 模块、adm-zip 模块、cheerio 模块和 fs 模块来实现下载、解压缩、解析 HTML 和文件读写功能。

以下是一个简单的脚本,可以实现你的需求:

const request = require('request');
const AdmZip = require('adm-zip');
const cheerio = require('cheerio');
const fs = require('fs');

const DOWNLOAD_URL = 'https://www.iconfont.cn/collections/detail?spm=a313x.7781069.1998910419.d9df05512&cid=9402';
const DOWNLOAD_DIR = './download';
const TTF_DIR = './ttf';
const DART_FILE = './lib/iconfont.dart';

// 创建下载目录和 TTF 目录
if (!fs.existsSync(DOWNLOAD_DIR)) {
  fs.mkdirSync(DOWNLOAD_DIR);
}
if (!fs.existsSync(TTF_DIR)) {
  fs.mkdirSync(TTF_DIR);
}

// 下载 iconfont 压缩文件
request(DOWNLOAD_URL, (error, response, body) => {
  if (!error && response.statusCode == 200) {
    const $ = cheerio.load(body);
    const downloadLink = $('.download-detail .download-btn').attr('href');
    const downloadUrl = `https:${downloadLink}`;
    const fileName = downloadLink.split('/').pop();

    console.log(`Downloading ${fileName}...`);

    const file = fs.createWriteStream(`${DOWNLOAD_DIR}/${fileName}`);
    request(downloadUrl).pipe(file).on('close', () => {
      console.log(`Downloaded ${fileName} successfully.`);

      // 解压缩文件
      const zip = new AdmZip(`${DOWNLOAD_DIR}/${fileName}`);
      zip.extractAllTo(DOWNLOAD_DIR, true);

      // 将 ttf 文件移动到 TTF 目录
      const ttfFile = `${DOWNLOAD_DIR}/iconfont.ttf`;
      fs.renameSync(ttfFile, `${TTF_DIR}/iconfont.ttf`);

      // 生成 dart 文件
      const icons = [];
      const svgFiles = fs.readdirSync(`${DOWNLOAD_DIR}/svg`);
      svgFiles.forEach(file => {
        const iconName = file.split('.')[0];
        icons.push(`static const IconData ${iconName} = IconData(0x${iconName}, fontFamily: 'iconfont');`);
      });
      const dartContent = `import 'package:flutter/widgets.dart';

class IconFont {
${icons.join('
')}
}
`;
      fs.writeFileSync(DART_FILE, dartContent);

      console.log(`Done.`);
    });
  } else {
    console.error(error);
  }
});

脚本的执行过程如下:

  1. 请求阿里云图标库的页面,解析页面中的下载链接。
  2. 下载压缩文件,并保存到下载目录。
  3. 解压缩文件,并将 ttf 文件移动到 TTF 目录。
  4. 解析 svg 文件名,生成对应的 IconData 常量,并保存到 dart 文件中。

你可以将脚本保存到一个 .js 文件中,然后使用命令行工具运行:node filename.js。注意,在运行脚本前,需要先安装 requestadm-zipcheeriofs 模块,可以使用 npm 安装:npm install request adm-zip cheerio fs

Node.js脚本:下载阿里图标库并生成Flutter IconFont文件

原文地址: https://www.cveoy.top/t/topic/lyKF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录