vite-uni-dev-tool
Version:
vite-uni-dev-tool, debug, uni-app, 一处编写,到处调试
37 lines (36 loc) • 3.36 kB
JavaScript
;const I=require("path"),C=require("fs"),u=require("../utils/index.js");function $(a){const d=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const l in a)if(l!=="default"){const f=Object.getOwnPropertyDescriptor(a,l);Object.defineProperty(d,l,f.get?f:{enumerable:!0,get:()=>a[l]})}}return d.default=a,Object.freeze(d)}const S=$(I),D=$(C),g=/<script[^>]*>([\s\S]*?)<\/script>/,_={isReady:!1,urls:[]};function y({pages:a,sourceFileServers:d,importConsole:l,...f}){return{name:"vite-uni-dev-tool",enforce:"pre",configureServer(e){var p;e.middlewares.use((s,n,t)=>{const{originalUrl:r}=s;if(f.useDevSource&&(r!=null&&r.includes("__dev_sourcefile__"))){const i=r.replace("/__dev_sourcefile__","");try{const c=e.config.root,v=S.join(c,i),o=D.readFileSync(v,"utf-8");n.setHeader("Content-Type",u.getContentType(v)),n.end(o)}catch{t()}}else t()}),(p=e.httpServer)==null||p.once("listening",()=>{var t;const s=(t=e.httpServer)==null?void 0:t.address(),n=u.getLocalIPs();if(s&&!Array.isArray(s)&&typeof s!="string"){const r=n.map(i=>`http://${i}:${s.port}/__dev_sourcefile__`);_.isReady=!0,_.urls=r,console.warn(`
⚡️ vite-uni-dev-tool source file server running at:
${n.map(i=>`➜ Source File Network: http://${i}:${s==null?void 0:s.port}/__dev_sourcefile__`).join(`
`)}
`)}})},transform(e,p){var s;if(p.endsWith("/src/main.ts"))try{const n=e.split(`
`);let t=[...n];const r=u.findInsertionIndex(t,c=>c.trim().startsWith("import")||c.trim().startsWith("export"));r!==-1&&t.splice(r,0,"import DevTool from 'vite-uni-dev-tool/dev/components/DevTool/index.vue';");const i=u.findInsertionIndex(t,c=>c.includes(".mount(")||c.includes("createApp("));if(i!==-1&&t.splice(i+1,0," app.component('DevTool', DevTool);"),t.length!==n.length)return{code:t.join(`
`),map:null}}catch(n){return console.error("[DevTool] 转换 main 文件时出错:",n),{code:e,map:null}}if(p.endsWith("/src/App.vue")){const n=e.match(g);if(n&&n[1]){const t=n[1].trim(),r=u.hasImportCurrentInstance(t),i=u.hasImportOnLaunch(t),c=r?"":"import { getCurrentInstance } from 'vue'",v=i?"":"import { onLaunch } from '@dcloudio/uni-app'",o=`
import { initDevTool${l?", console":""} } from 'vite-uni-dev-tool/dev/core';
import pagesJson from './pages.json';
${t}
onLaunch(() => {
const vue3instance = getCurrentInstance();
initDevTool({
pagesJson,
vue3instance,
mode: import.meta.env.MODE,
sourceFileServers: [
${[..._.urls??[],...d??[]].map(h=>`'${h}'`)}
],
useDevSource: ${f.useDevSource},
...${JSON.stringify(f)},
});
});`;return{code:e.replace(g,`
<script lang="ts" setup>
${c}
${v}
${o}
<\/script>`),map:null}}return{code:e,map:null}}if(p.endsWith(".vue")){const n=e.includes("<template>"),t=a.pages.some(o=>p.includes(o.path)),r=(s=a.subPackages)==null?void 0:s.some(o=>o.pages.some(m=>p.includes(`${o.root}/${m.path}`))),i=["<DevTool />"],c=u.hasImportConsole(e),v=u.hasUseConsole(e);if(!c&&v&&!p.endsWith("/src/App.vue")){const o=e.match(g);if(o&&o[1]){const m=o[1],h=`
${l?"import { console } from 'vite-uni-dev-tool/dev/core';":""}
${m}
`;e=e.replace(g,`
<script lang="ts" setup>
${h}
<\/script>`)}}if((t||r)&&n){const o=u.getTemplateContent(e);let m=e;if(o){const h=`<view>${o}
${i.join(`
`)}</view>`;m=e.replace(o,h)}return{code:m,map:null}}}return{code:e,map:null}}}}module.exports=y;