#!/usr/bin/env node import fs from 'fs-extra'; import { optimize } from 'svgo'; import svgstore from 'svgstore'; export default function symbol(options = {}) { const { inFile = 'src/assets/svgs', outFile = 'public/fonts', fileName = 'symbol', ...rest } = options; // 如果 outFile 不存在, 则创建 // If outFile does not exist, create it if (!fs.existsSync(outFile)) { fs.mkdirSync(outFile); } // 创建一个空的 svgstore // Create an empty svgstore const sprites = svgstore({ cleanDefs: true }); // 循环 icons 目录下的所有 svg 文件 // Loop through all svg files in the icons directory const svgs = fs.readdirSync(inFile); svgs.forEach(svg => { // 读取 svg 文件内容, 作为字符串 // Read the svg file content as a string const code = fs.readFileSync(`${inFile}/${svg}`, 'utf8'); // 使用 SVGO 进行优化 // Use SVGO for optimization const result = optimize(code); // 删除 result 中的 fill p-id width height class 等属性 // Delete fill p-id width height class and other attributes in result result.data = result.data .replace(/fill="[^"]*"/g, '') .replace(/p-id="[^"]*"/g, '') .replace(/width="[^"]*"/g, '') .replace(/height="[^"]*"/g, '') .replace(/class="[^"]*"/g, ''); // 将优化后的 svg 添加到 sprites 中 // Add the optimized svg to sprites sprites.toString({ inline: true }); sprites.add(svg.replace('.svg', ''), result.data); }); // 删除 sprites 的 标签和 标签 和 标签 // Delete the tag and tag of sprites const spritesStr = sprites .toString() .replace(/<\?xml[^>]*>/g, '') .replace(/]*>/g, '') .replace(//g, ''); // 写入到指定的文件中 // Write to the specified file fs.writeFileSync(outFile + '/' + fileName + '.svg', spritesStr); return { name: 'rollup-plugin-stdf-icon', }; }