From e6cdc20449db631bfdd7a4d29ab0c69d5e8e0f82 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Fri, 9 Jun 2023 00:46:13 +0800 Subject: [PATCH] feat: support for more config files. #48 --- README.md | 2 +- package.json | 2 +- src/index.ts | 46 ++++++++++++++++++---------------------------- 3 files changed, 20 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index f87e3c69..95dfe3ff 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ npm i svgtofont You can add configuration to package.json. [#48](https://github.com/jaywcjlove/svgtofont/issues/48) -Supports `.svgtofontrc` Configuration File. +Support for `.svgtofontrc` and [more](https://github.com/jaywcjlove/auto-config-loader/blob/add7ae012f5c3903296fbf0ef06e3631e379c2cc/core/README.md?plain=1#L106-L135) configuration files. ```js { diff --git a/package.json b/package.json index 368c4fef..4c7e8815 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "@types/ttf2eot": "~2.0.0", "@types/ttf2woff": "~2.0.2", "@types/ttf2woff2": "~2.0.0", + "auto-config-loader": "^1.7.1", "cheerio": "~1.0.0-rc.12", "colors-cli": "~1.0.28", "copy-template-dir": "~1.4.0", @@ -88,7 +89,6 @@ "ttf2eot": "~3.1.0", "ttf2woff": "~3.0.0", "ttf2woff2": "~5.0.0", - "yaml": "^2.1.3", "yargs": "~17.7.1" }, "devDependencies": { diff --git a/src/index.ts b/src/index.ts index 2a2ea5af..10e13230 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,8 +5,8 @@ import fs from 'fs-extra'; import image2uri from 'image2uri'; import { SvgIcons2FontOptions } from 'svgicons2svgfont'; import color from 'colors-cli'; +import { autoConf, merge } from 'auto-config-loader'; import { Config } from 'svgo'; -import * as YAML from 'yaml'; import { log } from './log'; import { generateIconsSource, generateReactIcons } from './generate'; import { createSVG, createTTF, createEOT, createWOFF, createWOFF2, createSvgSymbol, copyTemplate, CSSOptions, createHTML, createTypescript, TypescriptOptions } from './utils'; @@ -197,29 +197,25 @@ export type IconInfo = { export type InfoData = Record> export default async (options: SvgToFontOptions = {}) => { - const confPath = path.join(process.cwd(), '.svgtofontrc'); - if (fs.pathExistsSync(confPath)) { - const conf = await fs.readJson(confPath); - options = { ...options, ...conf }; - } else { - // load yaml config - const confPath = path.join(process.cwd(), '.svgtofontrc.yaml'); - if (fs.pathExistsSync(confPath)) { - const conf = await YAML.parse(fs.readFileSync(confPath, 'utf-8')); - options = { ...options, ...conf }; - } + const defaultOptions: SvgToFontOptions = { + dist: path.resolve(process.cwd(), 'fonts'), + src: path.resolve(process.cwd(), 'svg'), + startUnicode: 0xea01, + svg2ttf: {}, + svgicons2svgfont: { + fontName: 'iconfont', + }, + fontName: 'iconfont', + symbolNameDelimiter: '-', } - + const data = autoConf('svgtofont', { + mustExist: true, + default: defaultOptions, + }); + options = merge(defaultOptions, options, data); const pkgPath = path.join(process.cwd(), 'package.json'); if (fs.pathExistsSync(pkgPath)) { const pkg = require(pkgPath); - if (pkg.svgtofont) { - const cssOptions = options.css - options = { ...options, ...pkg.svgtofont } - if (pkg.svgtofont.css && cssOptions && typeof cssOptions === 'object') { - options.css = { ...cssOptions, ...pkg.svgtofont.css } - } - } if (options.website && pkg.version) { options.website.version = pkg.version; } @@ -227,16 +223,10 @@ export default async (options: SvgToFontOptions = {}) => { if (options.log === undefined) options.log = true; log.disabled = !options.log; if (options.logger && typeof options.logger === 'function') log.logger = options.logger; - options.dist = options.dist || path.resolve(process.cwd(), 'fonts'); - options.src = options.src || path.resolve(process.cwd(), 'svg'); - options.startUnicode = options.startUnicode || 0xea01; - options.svg2ttf = options.svg2ttf || {}; - options.emptyDist = options.emptyDist; - options.fontName = options.fontName || 'iconfont'; - options.svgicons2svgfont = options.svgicons2svgfont || {}; + options.svgicons2svgfont.fontName = options.fontName; - options.symbolNameDelimiter = options.symbolNameDelimiter || '-'; options.classNamePrefix = options.classNamePrefix || options.fontName; + const fontSize = options.css && typeof options.css !== 'boolean' && options.css.fontSize ? options.css.fontSize : '16px'; // If you generate a font you need to generate a style. if (options.website && !options.css) options.css = true;