function getSettings(options) { let settings = options || {}; _.defaults(settings, { sort: false, filename: 'checkstyle.xml', outputDir: '', severity: 'error', pathBase: '', pathPrefix: '' }); if (settings.pathBase) { settings.pathBase = upath.normalize(settings.pathBase); } if (settings.pathPrefix) { settings.pathPrefix = upath.normalize(settings.pathPrefix); } if (settings.outputDir) { settings.outputDir = upath.normalize(settings.outputDir); } return settings; }
export function patchOption (_options) { const _default = settings; var options = deepMerge( _default, _options ); if (!options.theme.id) throw new Error('Missing theme id'); if (!options.account.id) throw new Error('Missing app id'); if (!options.account.token) throw new Error('Missing app token'); if (!options.account.url) throw new Error('Missing app url'); options.account.protocol = (options.account.http) ? 'http://' : 'https://'; options.theme.root = upath.normalize(path.resolve(options.theme.root)); const VRegExp = new RegExp(/^http.*:[www]*\/\//); const VResult = _options.account.url.replace(VRegExp, ''); options.account.url = VResult.replace('/', ''); options.handle = `${_.split(options.account.url, '.', 1)}-${options.theme.id}` ; options.pathBackup = upath.normalize(options.theme.root + '/backup'); options.themeUrl = options.account.protocol + options.account.url + '/?theme_preview=' + options.theme.id options.insalesApi = { id: options.account.id, secret: options.account.token, http: options.account.http } return options; }
return scripts[0].attribs['data-js'].split(',').map(function (test) { test = test.trim(); if (file === DEFAULT_FILE) { test = path.join('test', 'suites', test); } else { var testPath = path.resolve('/', file, '..'); test = path.join(testPath, test); } var normalizedTestPath = upath.normalize(test); return normalizedTestPath; });
return through.obj(function(file, enc, cb) { var extName = nodejsPath.extname(file.path); switch(extName){ case ".js":{ var filePath = nodejsPath.normalize(file.path); var moduleContent = handleFile(filePath,filePath,config).moduleContent; // 替换入口文件里面的入口js,加上md5 if(config.mainJsReplace && !config.debug) { if(filePath == config.mainJsReplace.mainJSPath) { var replaceFilePath = config.mainJsReplace.replaceFilePath; var indexHtmlContent = fs.readFileSync(replaceFilePath).toString(); indexHtmlContent = indexHtmlContent.replace( config.mainJsReplace.replaceString, config.mainJsReplace.replaceString + "_" + md5HashManager.get(filePath) ); fs.writeFileSync(replaceFilePath, indexHtmlContent); } } //console.log(file.path+"---"+"start"); if(!config.debug) { var skip = false; config.minifyExclude.forEach(function(excludePath){ if(new RegExp(excludePath).test(file.path)) { skip = true; } }); if(!skip) { try{ moduleContent = minify_js(moduleContent); }catch(e){ console.log("压缩文件" + filePath + "时出现错误,请检查错误,未能成功压缩", e.toString()); } } } file.contents=new Buffer(moduleContent); var reg = new RegExp(nodejsPath.extname(file.path) + "$"); var oldPath = file.path.replace(/\\/g, "/"); file.path = file.path.replace(reg, "_" + md5HashManager.get(oldPath) + nodejsPath.extname(file.path)); //console.log(file.path+"---"+"ok"); } } cb(null,file); });
export function getAssetPath (paths, _type, _name, _ext, _task) { var task = _task || {}; var _assets = paths.assets; var _folders = paths.folders; var _mediaExtension = paths.mediaExtension; var basePath = _assets[_type]['folder']; if (task.isAssetsPath) { if (_type === 'Asset::Media') { basePath = _folders['media']; if (_mediaExtension[_ext]) { basePath = _mediaExtension[_ext]; } if (_name.indexOf('.svg') > -1) { basePath = _mediaExtension['.svg']; } if (_name.indexOf('.scss') > -1) { basePath = _mediaExtension['.scss']; } if (_name.indexOf('.css') > -1) { basePath = _mediaExtension['.css']; } if (_name.indexOf('.js') > -1) { basePath = _mediaExtension['.js']; } if (_name.indexOf('.coffee') > -1) { basePath = _mediaExtension['.coffee']; } if (_name.indexOf('.js.liquid') > -1) { basePath = _mediaExtension['.js']; } if (_name.indexOf('.svg.liquid') > -1) { basePath = _mediaExtension['.svg']; } if (_name.indexOf('.css.liquid') > -1) { basePath = _mediaExtension['.css']; } if (_name.indexOf('.scss.liquid') > -1) { basePath = _mediaExtension['.css']; } } } return upath.normalize(basePath + _name); }
function getReportedFilePath(settings, vinyl) { let result = upath.normalize(vinyl.path); if (settings) { if (settings.pathBase) { const index = result.indexOf(settings.pathBase); if (index > 0) { result = result.substr(index + settings.pathBase.length); } } if (settings.pathPrefix) { result = path.join(settings.pathPrefix, result); } } if (path.sep === path.win32.sep) { result = result.replace(/\//, path.win32.sep); } return result; }
/* @param fileName 当前文件名 @param moduleName 模块名 */ function getModulePath(fileName,moduleName,config){ var replaced = false; if((moduleName.indexOf("./")==0||moduleName.indexOf("../")==0)&&moduleName.indexOf("/")!=0){ var moduleFilePath = fileName +"/"+ moduleName; }else{ for(var i in config.modulePath){ if(replaced){ break; } var pathsReg = new RegExp("^" + i); if(pathsReg.test(moduleName)){ replaced = true; moduleName = moduleName.replace(pathsReg,config.modulePath[i]); } } var moduleFilePath = config.basePath +"/" +moduleName; } if(!/(css|js|tpl)$/.test(nodejsPath.extname(moduleFilePath))){ moduleFilePath = moduleFilePath+".js"; } return nodejsPath.normalize(moduleFilePath); }
return through.obj(function(file, enc, cb) { var extName = nodejsPath.extname(file.path); switch(extName){ case ".js":{ var filePath = nodejsPath.normalize(file.path); var moduleContent = handleFile(filePath,filePath,config).moduleContent; console.log(file.path+"---"+"start"); if(file.path.indexOf("angular")==-1&&file.path.indexOf("ckeditor")==-1){ try{ moduleContent = minify_js(moduleContent); }catch(e){ console.log(filePath); console.log(e.toString()); } } console.log(file.path+"---"+"ok"); file.contents=new Buffer(moduleContent); } } cb(null,file); });
export function getPaths (options) { const pathsDefault = {}; pathsDefault.folders = {}; pathsDefault.root = options.theme.root; pathsDefault.foldersDefaults = { 'template': options.theme.root+'/templates/', 'snippets': options.theme.root+'/snippets/', 'config': options.theme.root+'/config/', 'media_root': options.theme.root+'/media/' } pathsDefault.foldersAssets = { 'style': options.theme.root+'/assets/style/', 'script': options.theme.root+'/assets/js/', 'img': options.theme.root+'/assets/img/', 'svg': options.theme.root+'/assets/svg/', 'media': options.theme.root+'/assets/media/', 'fonts': options.theme.root+'/assets/fonts/' } normalizePaths(pathsDefault.foldersDefaults); normalizePaths(pathsDefault.foldersAssets); pathsDefault.folders = _.merge(pathsDefault.foldersAssets, pathsDefault.foldersDefaults); normalizePaths(pathsDefault.folders); pathsDefault.toWatch = getExcludeFiles(options); _.forEach(pathsDefault.folders, function(folder) { var _seeFolder = `${folder}*.*`; pathsDefault.toWatch.push(_seeFolder) }); pathsDefault.mediaExtension = { '.css': pathsDefault.folders['style'], '.scss': pathsDefault.folders['style'], '.css.liquid': pathsDefault.folders['style'], '.scss.liquid': pathsDefault.folders['style'], '.coffee': pathsDefault.folders['script'], '.js': pathsDefault.folders['script'], '.js.liquid': pathsDefault.folders['script'], '.svg': pathsDefault.folders['svg'], '.svg.liquid': pathsDefault.folders['svg'], '.jpeg': pathsDefault.folders['img'], '.jpg': pathsDefault.folders['img'], '.gif': pathsDefault.folders['img'], '.ico': pathsDefault.folders['img'], '.png': pathsDefault.folders['img'], '.ttf': pathsDefault.folders['fonts'], '.woff': pathsDefault.folders['fonts'], '.woff2': pathsDefault.folders['fonts'], '.otf': pathsDefault.folders['fonts'], '.eot': pathsDefault.folders['fonts'] } pathsDefault.assets = { 'Asset::Template': { 'extension': '.liquid', 'backup': upath.normalize(`${options.theme.root}/backup/templates/`), 'folder': pathsDefault.folders['template'] }, 'Asset::Snippet': { 'extension': '.liquid', 'backup': upath.normalize(`${options.theme.root}/backup/snippets/`), 'folder': pathsDefault.folders['snippets'] }, 'Asset::Configuration': { 'extension': ['.json', '.html'], 'backup': upath.normalize(`${options.theme.root}/backup/config/`), 'folder': pathsDefault.folders['config'] }, 'Asset::Media': { 'extension': ['.css', '.js', '.coffee', '.jpeg', '.gif', '.png', '.svg', '.scss', '.js.liquid', '.css.liquid', '.scss.liquid'], 'backup': upath.normalize(`${options.theme.root}/backup/media/`), 'folder': pathsDefault.folders['media_root'] } } return pathsDefault; }
_.forEach(paths, (folder, index) => { paths[index] = upath.normalize(folder) });
.map(line => path.normalize(line));
], (error, files) => error ? reject(error) : resolve(files.map(file => path.normalize(file)))));
ignored = ignored.map(function (path) { if (typeof path !== 'string') return path; return upath.normalize(isAbsolute(path) ? path : sysPath.join(cwd, path)); });
.map((fileName) => { const file = upath.normalize(fileName).replace(upath.join(process.cwd(), '/node_modules/'), ''); return file.startsWith("@") ? file.split("/").slice(0, 2).join("/") : file.split("/")[0]; })
return new Promise(function (resolve, reject) { const options = conf.get('options'); const paths = conf.get('paths'); const downloadList = conf.get('downloadList'); const eventEmitter = conf.get('eventEmitter'); for (var i = 0; i < assets.length; i++) { var asset = assets[i]; var _type = asset.type; var _name = asset.name; var _nameSplit = _name.split('.'); var _folders = paths.folders; var _assets = paths.assets; var _mediaExtension = paths.mediaExtension; var _isAssets = options.theme.assets; asset.isMedia = false; asset.pathMedia = ''; asset.folder = upath.normalize( _assets[_type]['folder'] ); asset.backup = upath.normalize( _assets[_type]['backup'] ); if (_type === 'Asset::Template' || _type === 'Asset::Snippet') { var _extension = _assets[_type]['extension']; if (_name.indexOf(_extension) === -1) { asset['name'] = _name + _extension; } asset['queue'] = 1; }else{ asset['queue'] = 2; } if (_type === 'Asset::Media') { asset.isMedia = true; asset['folder'] = _folders['media']; if (asset['content-type'] === 'text/js') { asset['folder'] = _mediaExtension['.js'] } if (asset['content-type'] === 'text/css') { asset['folder'] = _mediaExtension['.css'] } if (asset['content-type'] === 'application/x-scss') { asset['folder'] = _mediaExtension['.scss'] } if (asset['content-type'] === 'application/x-svg') { asset['folder'] = _mediaExtension['.svg'] } if (asset['content-type'].indexOf('image') > -1) { asset['folder'] = _folders['img']; } if (asset['content-type'] === 'application/x-ico') { asset['folder'] = _folders['img']; } if (_name.indexOf('.svg') > -1) { asset['folder'] = _mediaExtension['.svg']; } if (_name.indexOf('.scss') > -1) { asset['folder'] = _mediaExtension['.scss']; } if (_name.indexOf('.css') > -1) { asset['folder'] = _mediaExtension['.css']; } if (_name.indexOf('.js') > -1) { asset['folder'] = _mediaExtension['.js']; } if (_name.indexOf('.coffee') > -1) { asset['folder'] = _mediaExtension['.coffee']; } if (_name.indexOf('.js.liquid') > -1) { asset['folder'] = _mediaExtension['.js']; } if (_name.indexOf('.svg.liquid') > -1) { asset['folder'] = _mediaExtension['.svg']; } if (_name.indexOf('.css.liquid') > -1) { asset['folder'] = _mediaExtension['.css']; } if (_name.indexOf('.scss.liquid') > -1) { asset['folder'] = _mediaExtension['.css']; } if (asset['content-type'].indexOf('application') > -1) { var _ext = '.' + _nameSplit[_nameSplit.length - 1]; if (_mediaExtension[_ext]) { asset['folder'] = _mediaExtension[_ext] } } } asset.path = upath.normalize( asset.folder + asset['name'] ); asset.pathKey = upath.normalize( asset.folder + asset['name'] ); asset.backupPath = asset.backup + asset['name']; if (_type === 'Asset::Media') { asset.pathMedia = upath.normalize( _folders['media_root'] + asset['name'] ); asset.pathKey = upath.normalize( _folders['media_root'] + asset['name'] ); } if (asset['name'].indexOf('/') > -1 || asset['name'].indexOf('@') > -1) { eventEmitter.emit('file:error', { message: `Недопустимое имя файла: ${asset['name']}` }); } ownerAssets[asset.pathKey] = asset; downloadList.push(asset); } conf.set('assets', ownerAssets) conf.set('downloadList', downloadList) resolve() if (assets.length === 0) { reject() } })