| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- let config = require('../../../config/config');
- let path = require('path');
- let fileUtil = require('../../../util/fileUtil');
- let stringUtil = require('../../../util/stringUtil');
- class DefaultUpload {
- async upload (dirPath) {
- let fontMap = await this.uploadFonts(dirPath);
- // 上传font完毕后替换css中的引用
- let cssContent = await this.replaceFontsInCss(dirPath, fontMap);
- let cssNosUrl = await this.uploadCss(dirPath);
- return {url: cssNosUrl, cssContent: cssContent};
- }
- /**
- * 读取图标库生成的font文件到nos
- *
- * @param {String} dirPath 图标库文件夹路径
- * @return {Object} 字体文件nos链接的key=value对象
- */
- async uploadFonts (dirPath = '') {
- let fontDirPath = path.join(dirPath, './fonts');
- let fontFiles = await fileUtil.readDirector(fontDirPath);
- let fontMap = {};
- for (let font of fontFiles) {
- let fileExt = font.match(/.*\.(\w+)$/)[1];
- let fontPath = path.join(fontDirPath, font).replace(__dirname, '');
- fontMap[fileExt] = fontPath.replace(`${process.cwd()}/public`, `//${config.host}`);
- }
- return fontMap;
- }
- /**
- * 替换css文件中的字体文件引用
- *
- * @param {Object} fontMap 字体文件nos链接的key=value对象
- * @param {String} dirPath 图标库文件夹路径
- * @return {void}
- */
- async replaceFontsInCss (dirPath = '', fontMap = {}) {
- let cssDirPath = path.join(dirPath, './css');
- let cssFiles = await fileUtil.readDirector(cssDirPath);
- let cssPath = path.join(dirPath, './css/' + (cssFiles[0] || 'icons.css'));
- let cssContent = await fileUtil.readFile(cssPath, {encoding: 'utf8'});
- cssContent = stringUtil.replaceParams(cssContent, fontMap);
- await fileUtil.createFile(cssPath, cssContent);
- return cssContent;
- }
- /**
- * 图标库生成的css链接
- *
- * @param {String} dirPath 图标库文件夹路径
- * @return {String} css文件的nos链接
- */
- async uploadCss (dirPath) {
- let cssDirPath = path.join(dirPath, './css');
- let cssFiles = await fileUtil.readDirector(cssDirPath);
- let cssPath = path.join(dirPath, './css/' + (cssFiles[0] || 'icons.css'));
- return cssPath.replace(`${process.cwd()}/public`, `//${config.host}`);
- }
- }
- let uploadIns = new DefaultUpload();
- module.exports = uploadIns.upload.bind(uploadIns);
|