uniapp-sfc-loader
Version:
修改自uniapp-router-view-loader,解决windows下路径问题
3 lines (2 loc) • 5.1 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var Path=require("path"),Fs=require("fs"),nodeHtmlParser=require("node-html-parser");function _interopDefaultLegacy(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var Path__default=_interopDefaultLegacy(Path),Fs__default=_interopDefaultLegacy(Fs),ErrorId={10001:"pages.json文件解析异常, 请查看抛出的异常信息",10101:"App.vue文件中未找到<view-router />标签",10102:"App.vue文件中<view-router />标签数量超过1个以上",10201:"运行环境异常"},name="uniapp-sfc-loader",version="1.0.2";const provideKey="$urvl";var Config=Object.freeze({__proto__:null,provideKey:provideKey,name:name,version:version});const consoleStyle=()=>[`\`
%c ${name} V${version} `.concat("%c url: 965.ink/uniapp-router-view-loader \n`"),"'color: #ffffff; background: #64b587; padding:5px 0;'","'color: #fff;background: #38485c; padding:5px 0; margin-left:-1px;'"],getFileMatchReg=function(e,t){e=Path__default.default.join(e,"/"+t).split(Path__default.default.sep).join("/");const r=JSON.stringify(`^${e}.(n)?vue$`);return new RegExp(r.substring(1,r.length-1))},isVueFile=function(e){return/.(n?)vue$/.test(e)},getRouteFileMatchRegAll=function(e){try{const a=Fs__default.default.readFileSync(Path__default.default.join(process.env.UNI_INPUT_DIR,"./pages.json"),"utf8");let t;try{t=JSON.parse(a)}catch(e){var r=a.split("\n").map(e=>{var t=e.indexOf("//");if(-1<t){const r=e.substring(0,t);if((r.match(/"/g)||[]).length%2==0)return e.substring(0,t)}return e}).join("\n");t=JSON.parse(r)}const{pages:o,subPackages:n=[]}=t,l=[];return o.forEach(({path:e})=>{l.push(getFileMatchReg(process.env.UNI_INPUT_DIR,e))}),n.forEach(({pages:e,root:t})=>{e.forEach(({path:e})=>{l.push(getFileMatchReg(process.env.UNI_INPUT_DIR,t+"/"+e))})}),l}catch(e){console.log(e),print("error",ErrorId[10001])}},addCodeToHeader=function(e,t){return e.replace(/<view(.*?)>/,e=>e+t)},addCodeToFooter=function(e,t){return e.replace(/(<\/view>)([\s]*)(<\/template>)(?!(([\s\S]*)(<\/template>)))/,e=>t+e)},handleAppTemplateAddCode=function(e){let t="";switch(process.env.UNI_PLATFORM){case"h5":var r=e.replace(/(?<=<\/template>)[\w\W]*<\/template>/,e=>(t=e,"")).match(/<template>[\s\S]+<\/template>/)[0];return{source:e=e.replace(/<template>[\s\S]+<\/template>/,r),addCode:t};case"mp-weixin":case"mp-alipay":case"mp-baidu":case"mp-toutiao":case"mp-kuaishou":case"mp-lark":case"mp-qq":case"mp-360":case"quickapp-webview":case"app-plus":case"vite":return{source:e=e.replace(/<template>[\s\S]+<\/template>/,e=>(t=e,"")),addCode:t};default:print("error",ErrorId[10201])}},handleGetTemplateRowCode=function(e){e=e.replace(/<(\/?)template>/g,"");const t=nodeHtmlParser.parse(e).querySelectorAll("> *").toString().split(",");return t.map(e=>e.replace(/\n\s+/g,""))},handleGetTemplateHeaderOrFooterLabelCode=function(e){const t=/<view-router(\s{0,})><\/view-router>/,r=[],a=[];let o=!1,n=0;return e.forEach(e=>{if(t.test(e))return o=!0,n++,!0;(o?a:r).push(e)}),0===n?print("error",ErrorId[10101]):1<n&&print("error",ErrorId[10102]),{header:r,footer:a}},getPrintID=function(){return`[${name}]:`},print=function(e="log",t){var r=getPrintID();switch(e){case"log":console.log(""+r+t);break;case"error":throw new Error(""+r+t)}},handleVLabelReplacement=function(e,t={}){for(const[o,n]of Object.entries(t)){var r=new RegExp(`<(/?)${o}(\\s*)>`,"g"),a=new RegExp(`<${o}(.*?)/>`,"g");const l=new RegExp(o,"g");e=(e=e.replace(r,e=>e.replace(l,n))).replace(a,e=>e.replace(l,n))}return e};let addLabel={header:[],footer:[]};function getConfigure(e){return{config:Object.assign({},Config,e),routeFilePathRegList:getRouteFileMatchRegAll()}}function handleAppVue(e){print("App.vue file match, process: ",process.env.UNI_PLATFORM);var t=handleAppTemplateAddCode(e),r=handleGetTemplateRowCode(t.addCode),r=handleGetTemplateHeaderOrFooterLabelCode(r);return e=(e=t.source).replace(/<script>/,"<script>console.log("+consoleStyle()+")"),addLabel=Object.assign(addLabel,r),e}function handleRouteFile(e,t){return print("route file match: ",t),e=addCodeToHeader(e,addLabel.header.join("")),e=addCodeToFooter(e,addLabel.footer.join(""))}function index(e){const{routeFilePathRegList:t,config:r}=getConfigure(this.query);return this.resourcePath===Path.join(process.env.UNI_INPUT_DIR,"/App.vue")&&(e=handleAppVue(e)),t.some(e=>e.test(this.resourcePath))&&(e=handleRouteFile(e,this.resourcePath)),e=isVueFile(this.resourcePath)&&"[object Object]"===Object.prototype.toString.call(r.vLabel)?handleVLabelReplacement(e,r.vLabel):e}function vitePlugin(e){const{routeFilePathRegList:o,config:n}=getConfigure(e);return{name:name,enforce:"pre",transform(e,t){const r=Path.join(process.env.UNI_INPUT_DIR,"/App.vue");var a;return t===r.split(Path.sep).join("/")&&(a=process.env.UNI_PLATFORM,process.env.UNI_PLATFORM="vite",e=handleAppVue(e),process.env.UNI_PLATFORM=a),o.some(e=>e.test(t))&&(e=handleRouteFile(e,t)),{code:e=isVueFile(t)&&"[object Object]"===Object.prototype.toString.call(n.vLabel)?handleVLabelReplacement(e,n.vLabel):e}}}}exports.default=index,exports.vitePlugin=vitePlugin;