Node.js脚本:下载阿里图标库并生成Flutter IconFont文件
可以使用 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);
}
});
脚本的执行过程如下:
- 请求阿里云图标库的页面,解析页面中的下载链接。
- 下载压缩文件,并保存到下载目录。
- 解压缩文件,并将 ttf 文件移动到 TTF 目录。
- 解析 svg 文件名,生成对应的 IconData 常量,并保存到 dart 文件中。
你可以将脚本保存到一个 .js 文件中,然后使用命令行工具运行:node filename.js。注意,在运行脚本前,需要先安装 request、adm-zip、cheerio 和 fs 模块,可以使用 npm 安装:npm install request adm-zip cheerio fs。
原文地址: https://www.cveoy.top/t/topic/lyKF 著作权归作者所有。请勿转载和采集!