一、将所有的SVG内容,打包到js文件中,以key-value的形式存储。

1.使用脚本将所有SVG资源打包,脚本来源:react-native icon解决方案(svg)

生成getSvg.js文件(脚本代码如下),与SVG文件夹放在同一级,并根据需要修改其中参数。如SVG路径:./svgs ,修改成自己的文件夹路径及名称;导出的目标文件:./Svgs.js 可以修改名称。

//  getSvg.js
var fs = require('fs');
var path = require('path');
const svgDir = path.resolve(__dirname, './svgs');//这个位置 "./svgs"要替换成SVG(即你的放svg文件夹的名字)

// 读取单个文件
function readfile(filename) {
  return new Promise((resolve, reject) => {
    fs.readFile(path.join(svgDir, filename), 'utf8', function(err, data) {
      console.log(data.replace(/<\?xml.*?\?>|<\!--.*?-->|<!DOCTYPE.*?>/g, ''));
      if (err) reject(err);
      resolve({
        [filename.slice(0, filename.lastIndexOf('.'))]: data,
      });
    });
  });
}

// 读取SVG文件夹下所有svg
function readSvgs() {
  return new Promise((resolve, reject) => {
   fs.readdir(svgDir, function(err, files) {
     if (err) reject(err);
     Promise.all(files.map(filename => readfile(filename)))
      .then(data => resolve(data))
      .catch(err => reject(err));
   });
  });
}

// 生成js文件
readSvgs().then(data => {
  let svgFile = 'export default ' + JSON.stringify(Object.assign.apply(this, data));
  fs.writeFile(path.resolve(__dirname, './Svgs.js'), svgFile, function(err) {
    if(err) throw new Error(err);
  })
}).catch(err => {
    throw new Error(err);
  });

2.打开Terminal,执行 node getSvg.js 即可。

借鉴与  https://blog.csdn.net/crazy_sunshine/article/details/80906624

02-14 01:44