UNPKG

@fchc8/vite-plugin-multi-page

Version:

A powerful Vite plugin for building multi-page applications with smart file routing and multi-strategy builds

120 lines (118 loc) 23.7 kB
import*as d from"fs";import*as h from"path";import{mergeConfig as Q}from"vite";import*as $ from"path";import*as L from"fs";import{glob as Z}from"glob";import*as F from"path";function R(t,e,c,n){let r=[],p=new Map,u=e.replace(/\/\*.*$/,"");(!u||u===e)&&(u=F.dirname(e.split("*")[0]));let l=[];for(let o of t){if(c.includes(o))continue;let g=o.replace(/\\/g,"/"),f=u.replace(/\\/g,"/"),a=F.posix.relative(f,g).split("/");if(a.length===1){let i=a[0],m=F.posix.basename(i,F.posix.extname(i));l.push({name:m,file:o,priority:1})}else if(a.length>=2){let i=F.posix.basename(g,F.posix.extname(g)),m=a[0];i==="main"&&l.push({name:m,file:o,priority:2})}}for(let o of l){let g=p.get(o.name);g?o.priority>g.priority&&p.set(o.name,{file:o.file,priority:o.priority}):p.set(o.name,{file:o.file,priority:o.priority})}for(let[o,{file:g}]of p.entries())r.push({name:o,file:g});return r}function Y(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function N(t){return(...e)=>{t&&console.log("[vite-plugin-multi-page]",...e)}}function _(t,e,c){if(!t)return null;if(typeof t=="function")return t(e);for(let[n,r]of Object.entries(t)){if(n===e.pageName)return c(`\u7CBE\u786E\u5339\u914D\u9875\u9762 ${e.pageName}:`,r),r;if(r.match&&(Array.isArray(r.match)?r.match:[r.match]).some(l=>A(l,e.pageName)||A(l,e.relativePath)||A(l,e.filePath)))return c(`\u6A21\u5F0F\u5339\u914D\u9875\u9762 ${e.pageName} (\u6A21\u5F0F: ${r.match}):`,r),{...r,match:void 0};if(A(n,e.pageName))return c(`Glob\u5339\u914D\u9875\u9762 ${e.pageName} (\u6A21\u5F0F: ${n}):`,r),r}return null}function A(t,e){let c=t.replace(/\*\*/g,"__DOUBLE_STAR__").replace(/\*/g,"[^/]*").replace(/__DOUBLE_STAR__/g,".*");return new RegExp(`^${c}$`).test(e)}function ee(t,e,c){try{let n=Z.sync(e.entry,{cwd:process.cwd()}),r=R(n,e.entry,e.exclude,c);if(r.length===0){c("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6");return}let p=e.devStrategy||t.config.__cliStrategy||t.config.strategy;p&&(c(`\u5F00\u53D1\u670D\u52A1\u5668\u4F7F\u7528\u6307\u5B9A\u7684\u7B56\u7565: ${p}`),r=r.filter(u=>{let l={pageName:u.name,filePath:u.file,relativePath:$.relative(process.cwd(),u.file),strategy:void 0,isMatched:!1},o=_(e.pageConfigs,l,c),g=(o==null?void 0:o.strategy)||"default";return p==="default"?g==="default":g===p}),c(`\u7B56\u7565 "${p}" \u4E0B\u53EF\u7528\u7684\u9875\u9762: ${r.map(u=>u.name).join(", ")||"\u65E0"}`)),c("\u5F00\u53D1\u670D\u52A1\u5668\u5E94\u7528\u7684\u5165\u53E3\u6587\u4EF6:",r),t.middlewares.use(async(u,l,o)=>{try{let f=(u.url||"").split("?")[0];if(f==="/"){let i=ne(r,e,c);l.statusCode=200,l.setHeader("Content-Type","text/html"),l.end(i);return}if(f.match(/\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|map)$/)&&!f.endsWith(".html")||f.startsWith("/@")||f.includes("__vite")||f.startsWith("/node_modules"))return o();let s="";if(f.endsWith(".html"))s=$.basename(f,".html");else if(f.startsWith("/")){let i=f.substring(1);if(r.find(m=>m.name===i))s=i;else{let m=i.split("/");if(m.length>1){let C=m[0];r.find(x=>x.name===C)&&(s=C,c(`History \u8DEF\u7531\u5339\u914D: ${f} -> ${C}`))}}}if(!s)return o();let a=r.find(i=>i.name===s);return a?te(l,a,e,c):o()}catch(g){c(`\u5F00\u53D1\u670D\u52A1\u5668\u5904\u7406\u8BF7\u6C42\u5931\u8D25: ${g}`),o(g)}}),c("\u5F00\u53D1\u670D\u52A1\u5668\u914D\u7F6E\u5B8C\u6210")}catch(n){throw c(`\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668\u5931\u8D25: ${n}`),n}}function te(t,e,c,n){var f;let r={pageName:e.name,filePath:e.file,relativePath:$.relative(process.cwd(),e.file),strategy:void 0,isMatched:!1},p=_(c.pageConfigs,r,n);if(p!=null&&p.strategy)r.strategy=p.strategy;else if((f=c.appliedStrategies)!=null&&f.has(e.name)){let s=c.appliedStrategies.get(e.name);s&&(r.strategy=s)}let u="",l=$.resolve(process.cwd(),`${e.name}.html`);if(L.existsSync(l)?u=l:p!=null&&p.template?u=$.resolve(process.cwd(),p.template):u=$.resolve(process.cwd(),c.template),!L.existsSync(u)){t.statusCode=404,t.end("Template not found");return}let o=L.readFileSync(u,"utf-8");if(o.includes(c.placeholder)){let s=o;if(o=o.split(c.placeholder).join(`/${e.file}`),o===s){let a=Y(c.placeholder),i=new RegExp(a,"g");o=s.replace(i,`/${e.file}`),o===s&&(o=s.replace(/\{\{ENTRY_FILE\}\}/g,`/${e.file}`))}}if(p!=null&&p.define){let s=Object.entries(p.define).map(([a,i])=>{let m=typeof i=="string"?`"${i}"`:JSON.stringify(i);return`window.${a} = ${m};`}).join(` `);s&&(o=o.replace(/<\/head>/i,`<script type="text/javascript"> ${s} </script> </head>`))}t.statusCode=200,t.setHeader("Content-Type","text/html"),t.end(o)}var H=ee;function ne(t,e,c){try{let n=t.map(r=>{var g;let p={pageName:r.name,filePath:r.file,relativePath:$.relative(process.cwd(),r.file),strategy:void 0,isMatched:!1},u=_(e.pageConfigs,p,c),l="default";if(u!=null&&u.strategy)l=u.strategy;else if((g=e.appliedStrategies)!=null&&g.has(r.name)){let f=e.appliedStrategies.get(r.name);f&&(l=f)}let o=l!=="default"?`<span class="badge">${l}</span>`:"";return` <div class="page-item"> <a href="${r.name}.html" class="page-link"> ${r.name}${o} </a> <div class="page-path">${r.file}</div> </div>`}).join("");return` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>\u591A\u9875\u9762\u5E94\u7528\u7D22\u5F15</title> <style> body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; line-height: 1.6; color: #333; max-width: 1200px; margin: 0 auto; padding: 20px; background-color: #f5f5f7; } h1 { font-size: 24px; margin-bottom: 20px; color: #111; } .page-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; } .page-item { background-color: white; border-radius: 8px; padding: 16px; box-shadow: 0 1px 3px rgba(0,0,0,0.1); transition: transform 0.2s, box-shadow 0.2s; } .page-item:hover { transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0,0,0,0.1); } .page-link { display: flex; align-items: center; justify-content: space-between; font-size: 18px; font-weight: 500; color: #0066cc; text-decoration: none; margin-bottom: 8px; } .page-path { font-size: 14px; color: #666; word-break: break-all; } .badge { display: inline-block; font-size: 12px; padding: 2px 8px; border-radius: 12px; background-color: #e6f2ff; color: #0066cc; margin-left: 8px; } .stats { margin-bottom: 20px; font-size: 14px; color: #666; } </style> </head> <body> <h1>\u591A\u9875\u9762\u5E94\u7528\u7D22\u5F15</h1> <div class="stats"> \u627E\u5230 ${t.length} \u4E2A\u9875\u9762 </div> <div class="page-list"> ${n} </div> </body> </html> `}catch(n){return c(`\u751F\u6210\u7D22\u5F15\u9875\u5931\u8D25: ${n}`),` <!DOCTYPE html> <html> <head> <title>\u9519\u8BEF</title> </head> <body> <h1>\u751F\u6210\u7D22\u5F15\u9875\u65F6\u53D1\u751F\u9519\u8BEF</h1> <p>${n}</p> </body> </html> `}}import{mergeConfig as re}from"vite";import{glob as z}from"glob";import*as P from"path";import*as w from"fs";function U(t){var s;let{entry:e="src/pages/*/main.{ts,js}",exclude:c=[],template:n="index.html",placeholder:r="<!--VITE_MULTI_PAGE_ENTRY-->",strategies:p={},pageConfigs:u={},forceBuildStrategy:l,forceBuildPage:o}=t,g=N(!0),f={};try{let a=z.sync(e,{cwd:process.cwd()}),i=R(a,e,c,g);if(i.length===0)return g("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6"),{};let m=new Map,C=new Map;for(let y of i){let v={pageName:y.name,filePath:y.file,relativePath:P.relative(process.cwd(),y.file)},S=_(u,v,g),b=(S==null?void 0:S.strategy)||"default";m.set(y.name,b),C.has(b)||C.set(b,[]),(s=C.get(b))==null||s.push(y.name)}if(g(`\u{1F4C4} \u53D1\u73B0 ${i.length} \u4E2A\u9875\u9762: ${i.map(y=>y.name).join(", ")}`),o){if(!i.find(I=>I.name===o))return g(`\u8B66\u544A: \u672A\u627E\u5230\u9875\u9762 "${o}"`),{};let v=m.get(o)||"default",S=p[v]||{},b=D(`single-${o}`,[o],i,S,u,n,r,g);return f[`single-${o}`]=b,f}if(l){let y=C.get(l)||[];if(y.length===0)return g(`\u8B66\u544A: \u7B56\u7565 "${l}" \u4E0B\u6CA1\u6709\u9875\u9762`),{};g(`\u5F3A\u5236\u6784\u5EFA\u7B56\u7565: ${l}, \u9875\u9762: ${y.join(", ")}`);let v=D(l,y,i,p[l],u,n,r,g);return f[l]=v,f}for(let[y,v]of C){if(v.length===0)continue;let S=p[y]||{},b=D(y,v,i,S,u,n,r,g);f[y]=b}if(Object.keys(f).length===0){g("\u8B66\u544A: \u672A\u751F\u6210\u4EFB\u4F55\u6784\u5EFA\u914D\u7F6E\uFF0C\u521B\u5EFA\u9ED8\u8BA4\u914D\u7F6E");let y=i.map(S=>S.name),v=D("default",y,i,{},u,n,r,g);f.default=v}let x=Object.keys(f);return g(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${x.join(", ")}`),f}catch(a){throw g("\u751F\u6210\u6784\u5EFA\u914D\u7F6E\u5931\u8D25:",a),a}}function D(t,e,c,n,r,p,u,l){let o={},g=[],f={};for(let i of e){let m=c.find(V=>V.name===i);if(!m)continue;let C={pageName:i,filePath:m.file,relativePath:P.relative(process.cwd(),m.file),strategy:t},x=_(r,C,l);x!=null&&x.define&&Object.assign(f,x.define);let y=p,v=`${i}.html`;w.existsSync(P.resolve(process.cwd(),v))?y=v:x!=null&&x.template&&(y=x.template);let S=P.resolve(process.cwd(),y);if(!w.existsSync(S)){l(`\u8B66\u544A: \u6A21\u677F\u6587\u4EF6\u4E0D\u5B58\u5728: ${y}`);continue}let b=w.readFileSync(S,"utf-8");if(b.includes(u)){let V=`./${m.file}`;b=b.replace(new RegExp(u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),V)}let I=P.resolve(process.cwd(),`.temp.mp.${i}.html`);w.writeFileSync(I,b),g.push(I),o[i]=I}let s={build:{rollupOptions:{input:o,output:{entryFileNames:"assets/[name]-[hash].js",chunkFileNames:"assets/[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}},emptyOutDir:!1},define:{}},a=s;return n&&(a=re(s,n)),Object.keys(f).length>0&&(a.define={...a.define,...f}),a.build||(a.build={}),a.build.rollupOptions||(a.build.rollupOptions={}),a.build.rollupOptions.input=o,a.build.emptyOutDir=!1,l(`\u7B56\u7565 "${t}" - ${e.length} \u4E2A\u9875\u9762`),a}function q(t=[]){let e=t.findIndex(n=>n==="--outDir");if(e!==-1&&e+1<t.length){let n=t[e+1];return P.resolve(process.cwd(),n)}let c=t.find(n=>n.startsWith("--outDir="));if(c){let n=c.split("=")[1];return P.resolve(process.cwd(),n)}return P.resolve(process.cwd(),"dist")}function se(t=[]){let e=q(t),c=N(!0);try{w.existsSync(e)&&(w.rmSync(e,{recursive:!0,force:!0}),c(`\u{1F9F9} \u6E05\u7406\u8F93\u51FA\u76EE\u5F55: ${P.relative(process.cwd(),e)}`))}catch(n){c(`\u26A0\uFE0F \u6E05\u7406\u8F93\u51FA\u76EE\u5F55\u5931\u8D25: ${e}`,n)}}function ie(t){let{entry:e="src/pages/*/main.{ts,js}",exclude:c=[],pageConfigs:n={}}=t,r=N(!1),p=new Set,u=z.sync(e,{cwd:process.cwd()}),l=R(u,e,c,r);if(l.length===0)throw new Error(`\u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6: ${e}`);try{for(let o of l){let g={pageName:o.name,filePath:o.file,relativePath:P.relative(process.cwd(),o.file)},f=_(n,g,r),s=(f==null?void 0:f.strategy)||"default";p.add(s)}return Array.from(p).sort()}catch(o){return r("\u83B7\u53D6\u53EF\u7528\u7B56\u7565\u5931\u8D25:",o),["default"]}}import*as M from"fs";import*as j from"path";import{pathToFileURL as oe}from"url";import{Module as k}from"module";var J=["multipage.config.js","multipage.config.mjs","multipage.config.ts"];function G(){for(let t of J){let e=j.resolve(process.cwd(),t);if(M.existsSync(e))return!0}return!1}async function W(t){let e=await ce();if(e){let c=e(t);return c||{}}return null}async function ae(t){if(t.endsWith(".ts"))try{let e=await M.promises.readFile(t,"utf-8"),c;try{c=await import("esbuild")}catch{throw console.error(` \u274C \u65E0\u6CD5\u52A0\u8F7D TypeScript \u914D\u7F6E\u6587\u4EF6\uFF0C\u56E0\u4E3A\u627E\u4E0D\u5230 esbuild \u4F9D\u8D56\u3002`),console.error(` \u{1F4A1} \u8BF7\u9009\u62E9\u4EE5\u4E0B\u89E3\u51B3\u65B9\u6848\u4E4B\u4E00\uFF1A`),console.error(' 1. \u5B89\u88C5 esbuild (peerDependency)\uFF1Anpm install esbuild@">=0.19.3" --save-dev'),console.error(" 2. \u6216\u8005\u5982\u679C\u4F7F\u7528 Vite \u9879\u76EE\uFF0Cesbuild \u901A\u5E38\u5DF2\u5B89\u88C5\uFF0C\u8BF7\u68C0\u67E5\u7248\u672C\u662F\u5426 >=0.19.3"),console.error(" 3. \u4F7F\u7528 JavaScript \u914D\u7F6E\u6587\u4EF6\uFF1A\u5C06 multipage.config.ts \u91CD\u547D\u540D\u4E3A multipage.config.js"),console.error(` 4. \u4F7F\u7528 ESM \u914D\u7F6E\u6587\u4EF6\uFF1A\u5C06 multipage.config.ts \u91CD\u547D\u540D\u4E3A multipage.config.mjs `),new Error(`\u9700\u8981 esbuild \u4F9D\u8D56\u6765\u5904\u7406 TypeScript \u914D\u7F6E\u6587\u4EF6: ${j.basename(t)}`)}let n=await c.transform(e,{loader:"ts",format:"cjs",target:"node16",sourcemap:!1}),r=new k(t);return r.filename=t,r.paths=k._nodeModulePaths(j.dirname(t)),r._compile(n.code,t),r.exports}catch(e){if(e instanceof Error&&e.message.includes("\u9700\u8981 esbuild \u4F9D\u8D56"))throw e;console.warn("esbuild \u8F6C\u8BD1\u5931\u8D25\uFF0C\u5C1D\u8BD5\u7B80\u5355\u8F6C\u6362:",e);let n=(await M.promises.readFile(t,"utf-8")).replace(/export\s+default\s+/,"module.exports = ").replace(/import\s+.*?from\s+['"][^'"]*['"];?\s*/g,"").replace(/:\s*[^=,})\]]+/g,""),r=new k(t);return r.filename=t,r.paths=k._nodeModulePaths(j.dirname(t)),r._compile(n,t),r.exports}if(t.endsWith(".js")||t.endsWith(".mjs"))return import(`${oe(t).href}?t=${Date.now()}`);throw new Error(`\u4E0D\u652F\u6301\u7684\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B: ${t}`)}async function ce(){let t=process.cwd();for(let e of J){let c=j.resolve(t,e);if(M.existsSync(c))try{let n=await ae(c),r=n.default||n;if(typeof r=="function")return r;console.warn(`\u914D\u7F6E\u6587\u4EF6 ${e} \u5FC5\u987B\u9ED8\u8BA4\u5BFC\u51FA\u4E00\u4E2A\u51FD\u6570`)}catch(n){e.endsWith(".ts")?(console.error(`\u52A0\u8F7DTypeScript\u914D\u7F6E\u6587\u4EF6 ${e} \u5931\u8D25:`,n),console.log("\u63D0\u793A\uFF1A\u786E\u4FDD\u4F60\u7684\u9879\u76EE\u652F\u6301TypeScript\uFF0C\u6216\u8005\u4F7F\u7528 .js/.mjs \u914D\u7F6E\u6587\u4EF6")):console.error(`\u52A0\u8F7D\u914D\u7F6E\u6587\u4EF6 ${e} \u5931\u8D25:`,n)}}return null}var E={entry:"src/pages/**/*.{ts,js}",exclude:[],template:"index.html",placeholder:"{{ENTRY_FILE}}",debug:!1,merge:"all",strategies:{default:{}},pageConfigs:{},pageEnvs:()=>null};function B(t){return t?{entry:t.entry??E.entry,exclude:t.exclude??E.exclude,template:t.template??E.template,placeholder:t.placeholder??E.placeholder,debug:t.debug??E.debug,merge:t.merge??E.merge,strategies:t.strategies??E.strategies,pageConfigs:t.pageConfigs??E.pageConfigs,pageEnvs:t.pageEnvs??E.pageEnvs,__forceBuildStrategy:t.__forceBuildStrategy}:{...E}}import*as K from"glob";function le(t){return typeof t=="function"?t:()=>t}function ge(t){return t}function X(t,e,c,n){let r=h.resolve(t,"assets");if(!d.existsSync(r)){n("assets\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u91CD\u7EC4");return}let p=d.readdirSync(t).filter(s=>s.endsWith(".html")).map(s=>h.resolve(t,s));if(p.length===0){if(n("\u672A\u627E\u5230HTML\u6587\u4EF6\uFF0C\u4F46\u4ECD\u9700\u6E05\u7406assets\u76EE\u5F55"),(e==="strategy"||e==="page")&&d.existsSync(r))try{d.rmSync(r,{recursive:!0,force:!0}),n("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(s){n("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",s)}return}let u=new Map,l=new Map;p.forEach(s=>{var S;let a=h.basename(s,".html");a.startsWith(".temp.mp.")&&(a=a.replace(".temp.mp.",""));let i=d.readFileSync(s,"utf-8"),m=[],C=/(?:src|href)="\/assets\/([^"]+)"/g,x;for(;(x=C.exec(i))!==null;){let b=x[1];m.push(b),l.has(b)||l.set(b,[]),(S=l.get(b))==null||S.push(a)}let y="";e==="page"&&(y=a);let v=h.resolve(t,y);u.set(a,{assets:m,targetDir:v}),n(`\u9875\u9762 ${a} \u4F9D\u8D56\u8D44\u6E90:`,m)}),n("\u7B2C\u4E00\u9636\u6BB5\u8865\u5145\uFF1A\u5206\u6790public\u76EE\u5F55\u8D44\u6E90");let o=new Set,g=h.resolve(process.cwd(),"public");if(d.existsSync(g)){let s=K.sync("**/*",{cwd:g,nodir:!0});for(let a of s)o.add(a),n(`\u53D1\u73B0public\u8D44\u6E90: ${a}`)}l.forEach((s,a)=>{s.length>1?n(`\u5171\u4EAB\u8D44\u6E90 ${a} \u88AB\u9875\u9762\u4F7F\u7528:`,s):n(`\u72EC\u5360\u8D44\u6E90 ${a} \u4EC5\u88AB\u9875\u9762 ${s[0]} \u4F7F\u7528`)}),u.forEach(({assets:s,targetDir:a},i)=>{let m=h.resolve(a,"assets");d.existsSync(m)||d.mkdirSync(m,{recursive:!0}),s.forEach(C=>{let x=h.resolve(r,C),y=h.resolve(m,C);if(d.existsSync(x)){d.copyFileSync(x,y);let S=(l.get(C)||[]).length>1?"\u5171\u4EAB\u8D44\u6E90":"\u72EC\u5360\u8D44\u6E90";n(`\u590D\u5236${S}\u5230 ${i}: assets/${C} -> ${h.relative(t,y)}`)}else n(`\u8B66\u544A: \u8D44\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: ${x}`)}),d.existsSync(r)&&d.readdirSync(r).forEach(x=>{if(!s.includes(x)){let y=h.resolve(r,x),v=h.resolve(m,x);d.existsSync(y)&&(d.copyFileSync(y,v),n(`\u590D\u5236\u5176\u4ED6\u8D44\u6E90\u6587\u4EF6\u5230 ${i}: assets/${x} -> ${h.relative(t,v)}`))}})}),n("\u7B2C\u4E09\u9636\u6BB5\u8865\u5145\uFF1A\u5904\u7406public\u76EE\u5F55\u8D44\u6E90");let f=new Set;u.forEach(({targetDir:s})=>{f.add(s)});for(let s of f)for(let a of o){let i=h.resolve(t,a),m=h.resolve(s,a);if(d.existsSync(i)){let C=h.dirname(m);d.existsSync(C)||d.mkdirSync(C,{recursive:!0}),d.copyFileSync(i,m),n(`\u590D\u5236public\u8D44\u6E90: ${a} -> ${h.relative(t,m)}`)}}if(u.forEach(({targetDir:s},a)=>{let i=h.resolve(t,`${a}.html`),m=a;if(d.existsSync(i)||(i=h.resolve(t,`.temp.mp.${a}.html`),d.existsSync(i)&&(m=a)),d.existsSync(i)){let C=d.readFileSync(i,"utf-8");C=C.replace(/(?:src|href)="\/assets\//g,v=>v.replace("/assets/","./assets/"));let x;e==="strategy"?x=h.resolve(s,`${m}.html`):e==="page"?x=h.resolve(s,"index.html"):x=i,d.writeFileSync(x,C),x!==i&&d.unlinkSync(i);let y=h.relative(t,x);n(`\u6309${e}\u5206\u7EC4\u79FB\u52A8HTML\u6587\u4EF6: ${m}.html -> ${y}`)}else n(`\u8B66\u544A: \u672A\u627E\u5230HTML\u6587\u4EF6: ${a}.html \u6216 .temp.mp.${a}.html`)}),d.existsSync(r))if(e==="strategy"||e==="page")try{d.rmSync(r,{recursive:!0,force:!0}),n("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(s){n("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",s)}else{l.forEach((a,i)=>{let m=h.resolve(r,i);d.existsSync(m)&&(d.unlinkSync(m),n(`\u6E05\u7406\u539F\u59CB\u8D44\u6E90\u6587\u4EF6: assets/${i}`))});let s=d.readdirSync(r);s.length===0?(d.rmdirSync(r),n("\u6E05\u7406\u7A7A\u7684assets\u76EE\u5F55")):n("assets\u76EE\u5F55\u4E2D\u8FD8\u6709\u672A\u5904\u7406\u7684\u6587\u4EF6:",s)}(e==="strategy"||e==="page")&&o.size>0&&(n("\u7B2C\u4E94\u9636\u6BB5\u8865\u5145\uFF1A\u6E05\u7406\u6839\u76EE\u5F55\u7684public\u8D44\u6E90"),o.forEach(s=>{let a=h.resolve(t,s);if(d.existsSync(a))try{d.unlinkSync(a),n(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90: ${s}`)}catch(i){n(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90\u5931\u8D25: ${s}`,i)}}),o.forEach(s=>{let a=h.resolve(t,s),i=h.dirname(a);for(;i!==t&&i!==h.dirname(i);)try{if(d.existsSync(i)&&d.readdirSync(i).length===0)d.rmdirSync(i),n(`\u5220\u9664\u7A7A\u76EE\u5F55: ${h.relative(t,i)}`),i=h.dirname(i);else break}catch{break}}))}function pe(t){let e,c=[],n=()=>{};return{name:"vite-multi-page",async configResolved(r){let p=null;G()&&(p=await W({mode:r.command==="serve"?"development":"production",command:r.command,isCLI:!1}));let u=B(p);e=t?t(u,{mode:r.command==="serve"?"development":"production",command:r.command,isCLI:!1}):u,n=e.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{},n("Vite\u914D\u7F6E\u5DF2\u89E3\u6790, \u4F7F\u7528\u914D\u7F6E:",{strategies:Object.keys(e.strategies||{}),entry:e.entry})},async config(r,{command:p}){var u;if(p==="serve"){let l=process.argv,o=l.find(g=>g.startsWith("--strategy="));if(o){let g=o.split("=")[1];g&&(process.env.VITE_MULTI_PAGE_STRATEGY=g)}else{let g=l.findIndex(f=>f==="--strategy");if(g!==-1&&g+1<l.length){let f=l[g+1];process.env.VITE_MULTI_PAGE_STRATEGY=f}}process.env.VITE_MULTI_PAGE_STRATEGY||(process.env.VITE_MULTI_PAGE_STRATEGY="default")}if(p==="build"){if(!e){let s=null;G()&&(s=await W({mode:"production",command:"build",isCLI:!1}));let a=B(s);e=t?t(a,{mode:"production",command:"build",isCLI:!1}):a,n=e.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{}}n("\u914D\u7F6E\u6784\u5EFA\u6A21\u5F0F");let l=process.env.VITE_MULTI_PAGE_BUILD_SINGLE_PAGE;if(l){n(`\u5355\u9875\u9762\u6784\u5EFA\u6A21\u5F0F: ${l}`);let s=U({entry:e.entry||"src/pages/**/*.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",merge:e.merge||"all",strategies:e.strategies||{},pageConfigs:e.pageConfigs||{},forceBuildStrategy:void 0,forceBuildPage:l}),a=Object.values(s);if(a.length>0){let i=a[0],m=Q(r,i);Object.assign(r,m),n(`\u5DF2\u5E94\u7528\u5355\u9875\u9762\u6784\u5EFA\u914D\u7F6E: ${l}`);return}else throw new Error(`\u672A\u627E\u5230\u9875\u9762: ${l}`)}let o=process.env.VITE_MULTI_PAGE_STRATEGY,g=U({entry:e.entry||"src/pages/**/*.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",merge:e.merge||"all",strategies:e.strategies||{},pageConfigs:e.pageConfigs||{},forceBuildStrategy:o}),f=Object.keys(g)[0];if(f&&g[f]){n(`\u5E94\u7528\u6784\u5EFA\u7B56\u7565: ${f}`);let s=g[f],a=Q(r,s);Object.assign(r,a),n(`\u5DF2\u5E94\u7528\u7B56\u7565 "${f}" \u7684\u914D\u7F6E:`,{build:!!s.build,define:!!s.define,plugins:((u=s.plugins)==null?void 0:u.length)||0})}else throw n("\u672A\u627E\u5230\u53EF\u7528\u7684\u6784\u5EFA\u7B56\u7565\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E"),new Error(`\u274C \u6784\u5EFA\u5931\u8D25: \u672A\u627E\u5230\u4EFB\u4F55\u6784\u5EFA\u7B56\u7565 \u53EF\u80FD\u7684\u539F\u56E0\uFF1A 1. \u914D\u7F6E\u6587\u4EF6\u8FD4\u56DE\u7A7A\u5BF9\u8C61 {} 2. \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6 3. \u6A21\u677F\u6587\u4EF6\u4E0D\u5B58\u5728 4. \u672A\u914D\u7F6E strategies \u5BF9\u8C61 \u6700\u5C0F\u914D\u7F6E\u793A\u4F8B\uFF1A export default () => ({ entry: "src/pages/**/*.{ts,js}", template: "index.html", strategies: { default: {} } });`)}},configureServer(r){if(r.config.command==="serve"){n("\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668");let p=process.env.VITE_MULTI_PAGE_STRATEGY||"default";n(`\u5F00\u53D1\u6A21\u5F0F\u7B56\u7565: ${p}`),H(r,{entry:e.entry||"src/pages/**/*.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",strategies:e.strategies||{},pageConfigs:e.pageConfigs||{},devStrategy:p},n)}},writeBundle(r){if(!(e!=null&&e.merge)||e.merge==="all")return;let p=r.dir||"dist",u=e.merge;n(`\u5E94\u7528\u6784\u5EFA\u4EA7\u7269\u5408\u5E76\u6A21\u5F0F: ${u}`);try{X(p,u,e,n)}catch(l){throw n("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",l),l}},buildEnd(){c.length>0&&(n(`\u6E05\u7406 ${c.length} \u4E2A\u4E34\u65F6\u6587\u4EF6`),c.forEach(r=>{try{d.existsSync(r)&&(d.unlinkSync(r),n(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6: ${r}`))}catch(p){n(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${r}`,p)}}),c.length=0)}}}function We(t,e,c,n){return X(t,e,c,n)}var Ye=pe;export{se as cleanViteOutputDirectory,Ye as default,le as defineConfig,ge as defineConfigTransform,U as generateBuildConfig,ie as getAvailableStrategies,q as getViteOutputDirectory,B as mergeWithDefaults,We as reorganizeAssetsInCLI,pe as viteMultiPage}; //# sourceMappingURL=index.mjs.map