index.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. let config = require('../../../config/config');
  2. let path = require('path');
  3. let fileUtil = require('../../../util/fileUtil');
  4. let stringUtil = require('../../../util/stringUtil');
  5. class DefaultUpload {
  6. async upload (dirPath) {
  7. let fontMap = await this.uploadFonts(dirPath);
  8. // 上传font完毕后替换css中的引用
  9. let cssContent = await this.replaceFontsInCss(dirPath, fontMap);
  10. let cssNosUrl = await this.uploadCss(dirPath);
  11. return {url: cssNosUrl, cssContent: cssContent};
  12. }
  13. /**
  14. * 读取图标库生成的font文件到nos
  15. *
  16. * @param {String} dirPath 图标库文件夹路径
  17. * @return {Object} 字体文件nos链接的key=value对象
  18. */
  19. async uploadFonts (dirPath = '') {
  20. let fontDirPath = path.join(dirPath, './fonts');
  21. let fontFiles = await fileUtil.readDirector(fontDirPath);
  22. let fontMap = {};
  23. for (let font of fontFiles) {
  24. let fileExt = font.match(/.*\.(\w+)$/)[1];
  25. let fontPath = path.join(fontDirPath, font).replace(__dirname, '');
  26. fontMap[fileExt] = fontPath.replace(`${process.cwd()}/public`, `//${config.host}`);
  27. }
  28. return fontMap;
  29. }
  30. /**
  31. * 替换css文件中的字体文件引用
  32. *
  33. * @param {Object} fontMap 字体文件nos链接的key=value对象
  34. * @param {String} dirPath 图标库文件夹路径
  35. * @return {void}
  36. */
  37. async replaceFontsInCss (dirPath = '', fontMap = {}) {
  38. let cssDirPath = path.join(dirPath, './css');
  39. let cssFiles = await fileUtil.readDirector(cssDirPath);
  40. let cssPath = path.join(dirPath, './css/' + (cssFiles[0] || 'icons.css'));
  41. let cssContent = await fileUtil.readFile(cssPath, {encoding: 'utf8'});
  42. cssContent = stringUtil.replaceParams(cssContent, fontMap);
  43. await fileUtil.createFile(cssPath, cssContent);
  44. return cssContent;
  45. }
  46. /**
  47. * 图标库生成的css链接
  48. *
  49. * @param {String} dirPath 图标库文件夹路径
  50. * @return {String} css文件的nos链接
  51. */
  52. async uploadCss (dirPath) {
  53. let cssDirPath = path.join(dirPath, './css');
  54. let cssFiles = await fileUtil.readDirector(cssDirPath);
  55. let cssPath = path.join(dirPath, './css/' + (cssFiles[0] || 'icons.css'));
  56. return cssPath.replace(`${process.cwd()}/public`, `//${config.host}`);
  57. }
  58. }
  59. let uploadIns = new DefaultUpload();
  60. module.exports = uploadIns.upload.bind(uploadIns);