UNPKG

nyx_server

Version:

Node内容发布

89 lines (80 loc) 3.39 kB
/* global global */ var _ = require("lodash"); var path = require('path'); var projects_cache_path = global.nxyConfig.projects_cache_path; /** * 资源转换 */ function UriResource(){} /** * 转换到cdn地址 */ UriResource.prototype.transToCdnUrl = function(){ }; /** * */ UriResource.prototype.transformUrl = function(content , resourceBaseUrl){ var workDir = global.nxyConfig.workDir; if(resourceBaseUrl.substring(0,projects_cache_path.length) == projects_cache_path){ workDir = projects_cache_path; } content = commonReplace(content , resourceBaseUrl , workDir); return requireReplace(content , resourceBaseUrl , workDir); }; //普通替换 var commonReplace = function(content , resourceBaseUrl , workDir){ var patterns = [ /<a[^\>]+href=['"]([^"']+)["']/gi, /<link[^\>]+href=['"]([^"']+)["']/gi, /<img[^\>]+src=['"]?([^"']+)["']?/gi, /[\s|:]url\s*\(\s*([^\(\)]+)\s*\)/gi, /<script[^\>]+src=['"]([^"']+)["']/gi, /\(\s*src=['"]([^"']+)["']/gi ]; patterns.forEach(function(regex){ content = content.replace(regex , function(match , url , offset, string){ var resloveUrl = path.join(resourceBaseUrl , url); if(!/^\s*http:\/\//i.test(url) && !/^\s*https:\/\//i.test(url) && !/\s*<%{1,2}[=|-]((?!%>).)*%>/g.test(url) && !/\s*{{((?!}}).)*}}/g.test(url) && !/^\s*javascript/i.test(url) && (url.indexOf("/")!=0)){ var relativePath = path.relative(workDir,resloveUrl); return match.replace(url, "/resources/"+relativePath).replace(/\\/g,"/"); }else{ return match; } }); }); return content; }; var requireReplace = function(content , resourceBaseUrl , workDir){ var contentBlocks = content.match(/requirejs.config(?:\r|\n|\s|\(\s*{)*paths(?:\r|\n|\s)*:(?:\r|\n|\s)*{([^}]*)}/gi); //得到paths的内容 if(!contentBlocks){ return content; } for(var i=0 ; i<contentBlocks.length ; i++){ var block = contentBlocks[i]; var arr = block.match(/["']+[^"']*["']+[\s]*:[\s]*["']+([^"']*)["']+/gi); if(typeof arr !== 'undefined'){ for(var j=0 ; j<arr.length ; j++){ var c = arr[j]; var m = /["']+[^"']*["']+[\s]*:[\s]*(["']+([^"']*)["'])+/gi.exec(c); var path1 = m[1]; //带引号的地址 var path2 = m[2]; //地址 var resloveUrl = path.join(resourceBaseUrl , path2); if(!/^\s*http:\/\//i.test(path2) && /^\s*https:\/\//i.test(path2) && !/\s*<%{1,2}[=|-]((?!%>).)*%>/g.test(path2) && !/\s*{{((?!}}).)*}}/g.test(path2) && !/^\s*javascript/i.test(path2) && (url.indexOf("/")!=0)){ var relativePath = "/resources/"+path.relative(workDir,resloveUrl).replace(/\\/g,"/"); content = content.replace(path1, '"'+relativePath+'"'); } } } } return content; }; module.exports = new UriResource();