生成svg模版
/* 由于要在icon组件中使用到svgs文件,因此直接将文件写到icon组件目录下
框架开发时候写入到src/lib/icon 目录底下
业务开发的时候写入到node_modules/snk-mobile/src/lib/icon目录底下
因此先判断是否存在路径 而后再写入
这样就方便icon组件进行引用
*/
const path = require('path');
const fs = require('fs');
const svgDir = path.resolve(__dirname, '../../assets/svgs');
function startWirteSvgFile(successCallBack) {
// 生成js文件
console.log('start create svg file!');
readSvgs().then((data) => {
const svgFile = `export default${JSON.stringify(Object.assign.apply(this, data))}`;
const pathForFrameWork = path.resolve(__dirname, '../../assets');
const pathForBusiness = path.resolve(__dirname, '../../assets');
writeSvgConfigIntoFile(pathForBusiness, svgFile, (isScuccess) => {
if (!isScuccess) {
writeSvgConfigIntoFile(pathForFrameWork, svgFile, (re, err) => {
if (re) {
successCallBack();
} else {
console.error(err);
console.error('svg建立失败!');
}
});
} else {
successCallBack();
}
});
}).catch((err) => {
console.error(err);
console.error('svg建立失败!');
});
}
function writeSvgConfigIntoFile(pathUrl, svgFile, cb) {
fs.exists(pathUrl, (isExists) => {
if (isExists) {
fs.writeFile(`${pathUrl}/svgs.js`, svgFile, (err) => {
if (err) {
cb && cb(false, err);
} else {
console.log('svg建立成功!');
cb && cb(true);
}
});
} else {
cb && cb(false);
}
});
}
// 读取单个文件
function readfile(filename) {
return new Promise((resolve, reject) => {
fs.readFile(path.join(svgDir, filename), 'utf8', (err, data) => {
data = data.replace(/<\?xml.*?\?>|<!--.*?-->|<path fill='#[a-zA-Z0-9]'|<!DOCTYPE.*?>/g, '');
data = data.replace(/<path fill="#[a-zA-Z0-9]+"|<path/g, '<path fill="#ef473a"');
data = data.replace(/class/g, 'c');
if (err) reject(err);
resolve({
[filename.slice(0, filename.lastIndexOf('.'))]: data,
});
});
});
}
// 读取SVG文件夹下全部svg
function readSvgs() {
return new Promise((resolve, reject) => {
fs.readdir(svgDir, (err, files) => {
if (err) reject(err);
Promise.all(files.map(filename => readfile(filename)))
.then(data => resolve(data))
.catch(() => reject(err));
});
});
}
startWirteSvgFile()
复制代码