@fchc8/vite-plugin-multi-page 1.10.1 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-EN.md +78 -10
- package/README.md +78 -10
- package/dist/cli.js +21 -21
- package/dist/index.d.mts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
package/README-EN.md
CHANGED
|
@@ -361,9 +361,76 @@ After building, both pages will have their own resource copies:
|
|
|
361
361
|
|
|
362
362
|
- `VITE_BUILD_STRATEGY`: Specify a single strategy build
|
|
363
363
|
- `VITE_MULTI_PAGE_BUILD_SINGLE_PAGE`: Specify single page build (used internally by Page mode)
|
|
364
|
+
- `VITE_MULTI_PAGE_STRATEGY`: Current build strategy (automatically set)
|
|
365
|
+
- `VITE_MULTI_PAGE_CURRENT_PAGE`: Current page name (automatically set in Page mode)
|
|
366
|
+
- `VITE_MULTI_PAGE_MERGE_MODE`: Current merge mode (automatically set in Page mode)
|
|
364
367
|
- `IS_MOBILE`: Mobile identifier (configured in define)
|
|
365
368
|
- `API_BASE`: API base address (configured in define)
|
|
366
369
|
|
|
370
|
+
### Page Mode Environment Variable Injection
|
|
371
|
+
|
|
372
|
+
In Page mode (`merge: 'page'`), you can inject specific environment variables for each page through the `pageEnvs` function:
|
|
373
|
+
|
|
374
|
+
```typescript
|
|
375
|
+
// multipage.config.ts
|
|
376
|
+
export default defineConfig({
|
|
377
|
+
merge: 'page', // Enable Page mode
|
|
378
|
+
|
|
379
|
+
// Page environment variable injection function
|
|
380
|
+
pageEnvs: context => {
|
|
381
|
+
const { pageName, strategy, relativePath } = context;
|
|
382
|
+
|
|
383
|
+
// Return page-specific environment variables
|
|
384
|
+
const envs: Record<string, string> = {
|
|
385
|
+
VITE_CURRENT_PAGE_NAME: pageName,
|
|
386
|
+
VITE_CURRENT_STRATEGY: strategy || 'default',
|
|
387
|
+
VITE_BUILD_TIMESTAMP: new Date().toISOString(),
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
// Add specific variables based on page path
|
|
391
|
+
if (relativePath.includes('/mobile/')) {
|
|
392
|
+
envs.VITE_IS_MOBILE = 'true';
|
|
393
|
+
envs.VITE_API_URL = 'https://mobile-api.example.com';
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return envs;
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
#### Page Context
|
|
402
|
+
|
|
403
|
+
The `pageEnvs` function receives a page context object containing the following information:
|
|
404
|
+
|
|
405
|
+
- `pageName`: Page name (e.g., 'home', 'mobile')
|
|
406
|
+
- `strategy`: Strategy name assigned to this page
|
|
407
|
+
- `filePath`: Absolute path of the page entry file
|
|
408
|
+
- `relativePath`: Relative path of the page entry file
|
|
409
|
+
|
|
410
|
+
#### Use Cases
|
|
411
|
+
|
|
412
|
+
1. **Page-specific API configuration**: Set different API endpoints for different pages
|
|
413
|
+
2. **Page identification**: Identify the current page type at runtime
|
|
414
|
+
3. **Build information**: Inject build timestamps, version numbers, etc.
|
|
415
|
+
4. **Feature flags**: Enable or disable features for specific pages
|
|
416
|
+
|
|
417
|
+
#### Usage in Code
|
|
418
|
+
|
|
419
|
+
Injected environment variables can be accessed in code via `import.meta.env`:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
// src/pages/mobile/main.ts
|
|
423
|
+
console.log('Current page:', import.meta.env.VITE_CURRENT_PAGE_NAME);
|
|
424
|
+
console.log('Current strategy:', import.meta.env.VITE_CURRENT_STRATEGY);
|
|
425
|
+
console.log('Build time:', import.meta.env.VITE_BUILD_TIMESTAMP);
|
|
426
|
+
|
|
427
|
+
if (import.meta.env.VITE_IS_MOBILE === 'true') {
|
|
428
|
+
// Mobile-specific logic
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**Note**: The `pageEnvs` feature only works in Page mode (`merge: 'page'`) because only in this mode each page is built independently.
|
|
433
|
+
|
|
367
434
|
## TypeScript Support
|
|
368
435
|
|
|
369
436
|
The plugin fully supports TypeScript configuration files:
|
|
@@ -386,16 +453,17 @@ export default config;
|
|
|
386
453
|
|
|
387
454
|
### Configuration Options
|
|
388
455
|
|
|
389
|
-
| Option | Type | Default Value | Description
|
|
390
|
-
| ------------- | -------------------------- | -------------------------- |
|
|
391
|
-
| `entry` | `string` | `'src/pages/**/*.{ts,js}'` | Page entry matching rules
|
|
392
|
-
| `template` | `string` | `'index.html'` | HTML Template File
|
|
393
|
-
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` | Template placeholder
|
|
394
|
-
| `exclude` | `string[]` | `[]` | Excluded file patterns
|
|
395
|
-
| `debug` | `boolean` | `false` | Enable debug logging
|
|
396
|
-
| `merge` | `'all' \| 'page'` | `'all'` | Build output merge strategy
|
|
397
|
-
| `strategies` | `Record<string, Strategy>` | `{}` | Build strategy configuration
|
|
398
|
-
| `pageConfigs` | `Function \| Object` | `{}` | Page configuration
|
|
456
|
+
| Option | Type | Default Value | Description |
|
|
457
|
+
| ------------- | -------------------------- | -------------------------- | ------------------------------------------------------------- |
|
|
458
|
+
| `entry` | `string` | `'src/pages/**/*.{ts,js}'` | Page entry matching rules |
|
|
459
|
+
| `template` | `string` | `'index.html'` | HTML Template File |
|
|
460
|
+
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` | Template placeholder |
|
|
461
|
+
| `exclude` | `string[]` | `[]` | Excluded file patterns |
|
|
462
|
+
| `debug` | `boolean` | `false` | Enable debug logging |
|
|
463
|
+
| `merge` | `'all' \| 'page'` | `'all'` | Build output merge strategy |
|
|
464
|
+
| `strategies` | `Record<string, Strategy>` | `{}` | Build strategy configuration |
|
|
465
|
+
| `pageConfigs` | `Function \| Object` | `{}` | Page configuration |
|
|
466
|
+
| `pageEnvs` | `Function` | `() => null` | Page environment variable injection function (Page mode only) |
|
|
399
467
|
|
|
400
468
|
### Utility Functions
|
|
401
469
|
|
package/README.md
CHANGED
|
@@ -361,9 +361,76 @@ import buttonIcon from '../button-loading.svg'; // 相同的共享资源
|
|
|
361
361
|
|
|
362
362
|
- `VITE_BUILD_STRATEGY`: 指定单个策略构建
|
|
363
363
|
- `VITE_MULTI_PAGE_BUILD_SINGLE_PAGE`: 指定单个页面构建(Page模式内部使用)
|
|
364
|
+
- `VITE_MULTI_PAGE_STRATEGY`: 当前构建策略(自动设置)
|
|
365
|
+
- `VITE_MULTI_PAGE_CURRENT_PAGE`: 当前页面名称(Page模式下自动设置)
|
|
366
|
+
- `VITE_MULTI_PAGE_MERGE_MODE`: 当前合并模式(Page模式下自动设置)
|
|
364
367
|
- `IS_MOBILE`: 移动端标识 (在 define 中配置)
|
|
365
368
|
- `API_BASE`: API 基础地址 (在 define 中配置)
|
|
366
369
|
|
|
370
|
+
### Page模式环境变量注入
|
|
371
|
+
|
|
372
|
+
在Page模式(`merge: 'page'`)下,您可以通过 `pageEnvs` 函数为每个页面注入特定的环境变量:
|
|
373
|
+
|
|
374
|
+
```typescript
|
|
375
|
+
// multipage.config.ts
|
|
376
|
+
export default defineConfig({
|
|
377
|
+
merge: 'page', // 启用Page模式
|
|
378
|
+
|
|
379
|
+
// 页面环境变量注入函数
|
|
380
|
+
pageEnvs: context => {
|
|
381
|
+
const { pageName, strategy, relativePath } = context;
|
|
382
|
+
|
|
383
|
+
// 返回该页面特定的环境变量
|
|
384
|
+
const envs: Record<string, string> = {
|
|
385
|
+
VITE_CURRENT_PAGE_NAME: pageName,
|
|
386
|
+
VITE_CURRENT_STRATEGY: strategy || 'default',
|
|
387
|
+
VITE_BUILD_TIMESTAMP: new Date().toISOString(),
|
|
388
|
+
};
|
|
389
|
+
|
|
390
|
+
// 根据页面路径添加特定变量
|
|
391
|
+
if (relativePath.includes('/mobile/')) {
|
|
392
|
+
envs.VITE_IS_MOBILE = 'true';
|
|
393
|
+
envs.VITE_API_URL = 'https://mobile-api.example.com';
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
return envs;
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
#### 页面上下文 (PageContext)
|
|
402
|
+
|
|
403
|
+
`pageEnvs` 函数接收一个页面上下文对象,包含以下信息:
|
|
404
|
+
|
|
405
|
+
- `pageName`: 页面名称 (如 'home', 'mobile')
|
|
406
|
+
- `strategy`: 分配给该页面的策略名称
|
|
407
|
+
- `filePath`: 页面入口文件的绝对路径
|
|
408
|
+
- `relativePath`: 页面入口文件的相对路径
|
|
409
|
+
|
|
410
|
+
#### 使用场景
|
|
411
|
+
|
|
412
|
+
1. **页面特定的API配置**: 为不同页面设置不同的API端点
|
|
413
|
+
2. **页面标识**: 在运行时识别当前页面类型
|
|
414
|
+
3. **构建信息**: 注入构建时间戳、版本号等信息
|
|
415
|
+
4. **功能开关**: 为特定页面启用或禁用功能
|
|
416
|
+
|
|
417
|
+
#### 在代码中使用
|
|
418
|
+
|
|
419
|
+
注入的环境变量可以在代码中通过 `import.meta.env` 访问:
|
|
420
|
+
|
|
421
|
+
```typescript
|
|
422
|
+
// src/pages/mobile/main.ts
|
|
423
|
+
console.log('当前页面:', import.meta.env.VITE_CURRENT_PAGE_NAME);
|
|
424
|
+
console.log('当前策略:', import.meta.env.VITE_CURRENT_STRATEGY);
|
|
425
|
+
console.log('构建时间:', import.meta.env.VITE_BUILD_TIMESTAMP);
|
|
426
|
+
|
|
427
|
+
if (import.meta.env.VITE_IS_MOBILE === 'true') {
|
|
428
|
+
// 移动端特定逻辑
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**注意**: `pageEnvs` 功能仅在Page模式(`merge: 'page'`)下生效,因为only这种模式下每个页面是独立构建的。
|
|
433
|
+
|
|
367
434
|
## TypeScript 支持
|
|
368
435
|
|
|
369
436
|
插件完全支持 TypeScript 配置文件:
|
|
@@ -386,16 +453,17 @@ export default config;
|
|
|
386
453
|
|
|
387
454
|
### 配置选项
|
|
388
455
|
|
|
389
|
-
| 选项 | 类型 | 默认值 | 描述
|
|
390
|
-
| ------------- | -------------------------- | -------------------------- |
|
|
391
|
-
| `entry` | `string` | `'src/pages/**/*.{ts,js}'` | 页面入口匹配规则
|
|
392
|
-
| `template` | `string` | `'index.html'` | HTML 模板文件
|
|
393
|
-
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` | 模板占位符
|
|
394
|
-
| `exclude` | `string[]` | `[]` | 排除的文件模式
|
|
395
|
-
| `debug` | `boolean` | `false` | 启用调试日志
|
|
396
|
-
| `merge` | `'all' \| 'page'` | `'all'` | 构建产物合并策略
|
|
397
|
-
| `strategies` | `Record<string, Strategy>` | `{}` | 构建策略配置
|
|
398
|
-
| `pageConfigs` | `Function \| Object` | `{}` | 页面配置
|
|
456
|
+
| 选项 | 类型 | 默认值 | 描述 |
|
|
457
|
+
| ------------- | -------------------------- | -------------------------- | ---------------------------------- |
|
|
458
|
+
| `entry` | `string` | `'src/pages/**/*.{ts,js}'` | 页面入口匹配规则 |
|
|
459
|
+
| `template` | `string` | `'index.html'` | HTML 模板文件 |
|
|
460
|
+
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` | 模板占位符 |
|
|
461
|
+
| `exclude` | `string[]` | `[]` | 排除的文件模式 |
|
|
462
|
+
| `debug` | `boolean` | `false` | 启用调试日志 |
|
|
463
|
+
| `merge` | `'all' \| 'page'` | `'all'` | 构建产物合并策略 |
|
|
464
|
+
| `strategies` | `Record<string, Strategy>` | `{}` | 构建策略配置 |
|
|
465
|
+
| `pageConfigs` | `Function \| Object` | `{}` | 页面配置 |
|
|
466
|
+
| `pageEnvs` | `Function` | `() => null` | 页面环境变量注入函数(仅Page模式) |
|
|
399
467
|
|
|
400
468
|
### 工具函数
|
|
401
469
|
|
package/dist/cli.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var Ie=Object.create;var z=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var _=(e,t)=>()=>(e&&(t=e(e=0)),t);var
|
|
2
|
+
"use strict";var Ie=Object.create;var z=Object.defineProperty;var Re=Object.getOwnPropertyDescriptor;var je=Object.getOwnPropertyNames;var Ae=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var _=(e,t)=>()=>(e&&(t=e(e=0)),t);var k=(e,t)=>{for(var r in t)z(e,r,{get:t[r],enumerable:!0})},pe=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of je(t))!Le.call(e,s)&&s!==r&&z(e,s,{get:()=>t[s],enumerable:!(n=Re(t,s))||n.enumerable});return e};var E=(e,t,r)=>(r=e!=null?Ie(Ae(e)):{},pe(t||!e||!e.__esModule?z(r,"default",{value:e,enumerable:!0}):r,e)),Ue=e=>pe(z({},"__esModule",{value:!0}),e);var C=_(()=>{"use strict"});function N(e,t,r,n){let s=[],l=new Map,c=t.replace(/\/\*.*$/,"");(!c||c===t)&&(c=R.dirname(t.split("*")[0]));let i=[];for(let g of e){if(r.includes(g))continue;let f=g.replace(/\\/g,"/"),m=c.replace(/\\/g,"/"),u=R.posix.relative(m,f).split("/");if(u.length===1){let o=u[0],p=R.posix.basename(o,R.posix.extname(o));i.push({name:p,file:g,priority:1})}else if(u.length>=2){let o=R.posix.basename(f,R.posix.extname(f)),p=u[0];o==="main"&&i.push({name:p,file:g,priority:2})}}for(let g of i){let f=l.get(g.name);f?g.priority>f.priority&&l.set(g.name,{file:g.file,priority:g.priority}):l.set(g.name,{file:g.file,priority:g.priority})}for(let[g,{file:f}]of l.entries())s.push({name:g,file:f});return s}var R,re=_(()=>{"use strict";C();R=E(require("path"))});var ue={};k(ue,{getPageConfig:()=>I});function I(e,t,r){if(!e)return null;if(typeof e=="function")return e(t);for(let[n,s]of Object.entries(e)){if(n===t.pageName)return r(`\u7CBE\u786E\u5339\u914D\u9875\u9762 ${t.pageName}:`,s),s;if(s.match&&(Array.isArray(s.match)?s.match:[s.match]).some(i=>q(i,t.pageName)||q(i,t.relativePath)||q(i,t.filePath)))return r(`\u6A21\u5F0F\u5339\u914D\u9875\u9762 ${t.pageName} (\u6A21\u5F0F: ${s.match}):`,s),{...s,match:void 0};if(q(n,t.pageName))return r(`Glob\u5339\u914D\u9875\u9762 ${t.pageName} (\u6A21\u5F0F: ${n}):`,s),s}return null}function q(e,t){let r=e.replace(/\*\*/g,"__DOUBLE_STAR__").replace(/\*/g,"[^/]*").replace(/__DOUBLE_STAR__/g,".*");return new RegExp(`^${r}$`).test(t)}var J=_(()=>{"use strict";C()});function me(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function W(e){return(...t)=>{e&&console.log("[vite-plugin-multi-page]",...t)}}var oe=_(()=>{"use strict";C()});var X={};k(X,{cleanViteOutputDirectory:()=>ie,discoverPages:()=>ke,generateBuildConfig:()=>B,getAvailableStrategies:()=>ae,getViteOutputDirectory:()=>L});function B(e){var a;let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[],template:n="index.html",placeholder:s="<!--VITE_MULTI_PAGE_ENTRY-->",strategies:l={},pageConfigs:c={},forceBuildStrategy:i,forceBuildPage:g}=e,f=W(!0),m={};try{let u=K.glob.sync(t,{cwd:process.cwd()}),o=N(u,t,r,f);if(o.length===0)return f("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6"),{};let p=new Map,y=new Map;for(let S of o){let $={pageName:S.name,filePath:S.file,relativePath:F.relative(process.cwd(),S.file)},w=I(c,$,f),P=(w==null?void 0:w.strategy)||"default";p.set(S.name,P),y.has(P)||y.set(P,[]),(a=y.get(P))==null||a.push(S.name)}if(f(`\u{1F4C4} \u53D1\u73B0 ${o.length} \u4E2A\u9875\u9762: ${o.map(S=>S.name).join(", ")}`),g){if(!o.find(A=>A.name===g))return f(`\u8B66\u544A: \u672A\u627E\u5230\u9875\u9762 "${g}"`),{};let $=p.get(g)||"default",w=l[$]||{},P=Q(`single-${g}`,[g],o,w,c,n,s,f);return m[`single-${g}`]=P,m}if(i){let S=y.get(i)||[];if(S.length===0)return f(`\u8B66\u544A: \u7B56\u7565 "${i}" \u4E0B\u6CA1\u6709\u9875\u9762`),{};f(`\u5F3A\u5236\u6784\u5EFA\u7B56\u7565: ${i}, \u9875\u9762: ${S.join(", ")}`);let $=Q(i,S,o,l[i],c,n,s,f);return m[i]=$,m}for(let[S,$]of y){if($.length===0)continue;let w=l[S]||{},P=Q(S,$,o,w,c,n,s,f);m[S]=P}if(Object.keys(m).length===0){f("\u8B66\u544A: \u672A\u751F\u6210\u4EFB\u4F55\u6784\u5EFA\u914D\u7F6E\uFF0C\u521B\u5EFA\u9ED8\u8BA4\u914D\u7F6E");let S=o.map(w=>w.name),$=Q("default",S,o,{},c,n,s,f);m.default=$}let v=Object.keys(m);return f(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${v.join(", ")}`),m}catch(u){throw f("\u751F\u6210\u6784\u5EFA\u914D\u7F6E\u5931\u8D25:",u),u}}function Q(e,t,r,n,s,l,c,i){let g={},f=[],m={};for(let o of t){let p=r.find(ne=>ne.name===o);if(!p)continue;let y={pageName:o,filePath:p.file,relativePath:F.relative(process.cwd(),p.file),strategy:e},v=I(s,y,i);v!=null&&v.define&&Object.assign(m,v.define);let S=l,$=`${o}.html`;O.existsSync(F.resolve(process.cwd(),$))?S=$:v!=null&&v.template&&(S=v.template);let w=F.resolve(process.cwd(),S);if(!O.existsSync(w)){i(`\u8B66\u544A: \u6A21\u677F\u6587\u4EF6\u4E0D\u5B58\u5728: ${S}`);continue}let P=O.readFileSync(w,"utf-8");if(P.includes(c)){let ne=`./${p.file}`;P=P.replace(new RegExp(c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),ne)}let A=F.resolve(process.cwd(),`.temp.mp.${o}.html`);O.writeFileSync(A,P),f.push(A),g[o]=A}let a={build:{rollupOptions:{input:g,output:{entryFileNames:"assets/[name]-[hash].js",chunkFileNames:"assets/[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}},emptyOutDir:!1},define:{}},u=a;return n&&(u=(0,de.mergeConfig)(a,n)),Object.keys(m).length>0&&(u.define={...u.define,...m}),u.build||(u.build={}),u.build.rollupOptions||(u.build.rollupOptions={}),u.build.rollupOptions.input=g,u.build.emptyOutDir=!1,i(`\u7B56\u7565 "${e}" - ${t.length} \u4E2A\u9875\u9762`),u}function L(e=[]){let t=e.findIndex(n=>n==="--outDir");if(t!==-1&&t+1<e.length){let n=e[t+1];return F.resolve(process.cwd(),n)}let r=e.find(n=>n.startsWith("--outDir="));if(r){let n=r.split("=")[1];return F.resolve(process.cwd(),n)}return F.resolve(process.cwd(),"dist")}function ie(e=[]){let t=L(e),r=W(!0);try{O.existsSync(t)&&(O.rmSync(t,{recursive:!0,force:!0}),r(`\u{1F9F9} \u6E05\u7406\u8F93\u51FA\u76EE\u5F55: ${F.relative(process.cwd(),t)}`))}catch(n){r(`\u26A0\uFE0F \u6E05\u7406\u8F93\u51FA\u76EE\u5F55\u5931\u8D25: ${t}`,n)}}function ke(e){let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[]}=e,n=W(!0);try{let s=K.glob.sync(t,{cwd:process.cwd()});return N(s,t,r,n)}catch(s){throw n("\u53D1\u73B0\u9875\u9762\u5931\u8D25:",s),s}}function ae(e){let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[],pageConfigs:n={}}=e,s=W(!1),l=new Set,c=K.glob.sync(t,{cwd:process.cwd()}),i=N(c,t,r,s);if(i.length===0)throw new Error(`\u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6: ${t}`);try{for(let g of i){let f={pageName:g.name,filePath:g.file,relativePath:F.relative(process.cwd(),g.file)},m=I(n,f,s),a=(m==null?void 0:m.strategy)||"default";l.add(a)}return Array.from(l).sort()}catch(g){return s("\u83B7\u53D6\u53EF\u7528\u7B56\u7565\u5931\u8D25:",g),["default"]}}var de,K,F,O,U=_(()=>{"use strict";C();de=require("vite"),K=require("glob"),F=E(require("path")),O=E(require("fs"));re();J();oe()});var ve={};k(ve,{hasCustomConfig:()=>Z,loadUserConfig:()=>ee});function Z(){for(let e of he){let t=j.resolve(process.cwd(),e);if(G.existsSync(t))return!0}return!1}async function ee(e){let t=await Be();if(t){let r=t(e);return r||{}}return null}async function Ne(e){if(e.endsWith(".ts"))try{let t=await G.promises.readFile(e,"utf-8"),r;try{r=await import("esbuild")}catch{throw console.error(`
|
|
3
3
|
\u274C \u65E0\u6CD5\u52A0\u8F7D TypeScript \u914D\u7F6E\u6587\u4EF6\uFF0C\u56E0\u4E3A\u627E\u4E0D\u5230 esbuild \u4F9D\u8D56\u3002`),console.error(`
|
|
4
4
|
\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
|
|
5
|
-
`),new Error(`\u9700\u8981 esbuild \u4F9D\u8D56\u6765\u5904\u7406 TypeScript \u914D\u7F6E\u6587\u4EF6: ${j.basename(e)}`)}let
|
|
6
|
-
`);
|
|
7
|
-
${
|
|
5
|
+
`),new Error(`\u9700\u8981 esbuild \u4F9D\u8D56\u6765\u5904\u7406 TypeScript \u914D\u7F6E\u6587\u4EF6: ${j.basename(e)}`)}let n=await r.transform(t,{loader:"ts",format:"cjs",target:"node16",sourcemap:!1}),s=new Y.Module(e);return s.filename=e,s.paths=Y.Module._nodeModulePaths(j.dirname(e)),s._compile(n.code,e),s.exports}catch(t){if(t instanceof Error&&t.message.includes("\u9700\u8981 esbuild \u4F9D\u8D56"))throw t;console.warn("esbuild \u8F6C\u8BD1\u5931\u8D25\uFF0C\u5C1D\u8BD5\u7B80\u5355\u8F6C\u6362:",t);let n=(await G.promises.readFile(e,"utf-8")).replace(/export\s+default\s+/,"module.exports = ").replace(/import\s+.*?from\s+['"][^'"]*['"];?\s*/g,"").replace(/:\s*[^=,})\]]+/g,""),s=new Y.Module(e);return s.filename=e,s.paths=Y.Module._nodeModulePaths(j.dirname(e)),s._compile(n,e),s.exports}if(e.endsWith(".js")||e.endsWith(".mjs"))return import(`${(0,ye.pathToFileURL)(e).href}?t=${Date.now()}`);throw new Error(`\u4E0D\u652F\u6301\u7684\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B: ${e}`)}async function Be(){let e=process.cwd();for(let t of he){let r=j.resolve(e,t);if(G.existsSync(r))try{let n=await Ne(r),s=n.default||n;if(typeof s=="function")return s;console.warn(`\u914D\u7F6E\u6587\u4EF6 ${t} \u5FC5\u987B\u9ED8\u8BA4\u5BFC\u51FA\u4E00\u4E2A\u51FD\u6570`)}catch(n){t.endsWith(".ts")?(console.error(`\u52A0\u8F7DTypeScript\u914D\u7F6E\u6587\u4EF6 ${t} \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 ${t} \u5931\u8D25:`,n)}}return null}var G,j,ye,Y,he,ce=_(()=>{"use strict";C();G=E(require("fs")),j=E(require("path")),ye=require("url"),Y=require("module"),he=["multipage.config.js","multipage.config.mjs","multipage.config.ts"]});var xe={};k(xe,{DEFAULT_CONFIG:()=>T,isEmptyConfig:()=>Ge,mergeWithDefaults:()=>V});function V(e){return e?{entry:e.entry??T.entry,exclude:e.exclude??T.exclude,template:e.template??T.template,placeholder:e.placeholder??T.placeholder,debug:e.debug??T.debug,merge:e.merge??T.merge,strategies:e.strategies??T.strategies,pageConfigs:e.pageConfigs??T.pageConfigs,pageEnvs:e.pageEnvs??T.pageEnvs,__forceBuildStrategy:e.__forceBuildStrategy}:{...T}}function Ge(e){if(Object.keys(e).length===0)return!0;let t=e.entry&&e.entry!==T.entry,r=e.strategies&&Object.keys(e.strategies).length>0,n=e.pageConfigs&&(typeof e.pageConfigs=="function"||Object.keys(e.pageConfigs).length>0);return!t&&!r&&!n}var T,te=_(()=>{"use strict";C();T={entry:"src/pages/**/*.{ts,js}",exclude:[],template:"index.html",placeholder:"{{ENTRY_FILE}}",debug:!1,merge:"all",strategies:{default:{}},pageConfigs:{},pageEnvs:()=>null}});function Ve(e,t,r){try{let n=Se.glob.sync(t.entry,{cwd:process.cwd()}),s=N(n,t.entry,t.exclude,r);if(s.length===0){r("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6");return}let l=t.devStrategy||e.config.__cliStrategy||e.config.strategy;l&&(r(`\u5F00\u53D1\u670D\u52A1\u5668\u4F7F\u7528\u6307\u5B9A\u7684\u7B56\u7565: ${l}`),s=s.filter(c=>{let i={pageName:c.name,filePath:c.file,relativePath:D.relative(process.cwd(),c.file),strategy:void 0,isMatched:!1},g=I(t.pageConfigs,i,r),f=(g==null?void 0:g.strategy)||"default";return l==="default"?f==="default":f===l}),r(`\u7B56\u7565 "${l}" \u4E0B\u53EF\u7528\u7684\u9875\u9762: ${s.map(c=>c.name).join(", ")||"\u65E0"}`)),r("\u5F00\u53D1\u670D\u52A1\u5668\u5E94\u7528\u7684\u5165\u53E3\u6587\u4EF6:",s),e.middlewares.use(async(c,i,g)=>{try{let m=(c.url||"").split("?")[0];if(m==="/"){let o=Ye(s,t,r);i.statusCode=200,i.setHeader("Content-Type","text/html"),i.end(o);return}if(m.match(/\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|map)$/)&&!m.endsWith(".html")||m.startsWith("/@")||m.includes("__vite")||m.startsWith("/node_modules"))return g();let a="";if(m.endsWith(".html"))a=D.basename(m,".html");else if(m.startsWith("/")){let o=m.substring(1);if(s.find(p=>p.name===o))a=o;else{let p=o.split("/");if(p.length>1){let y=p[0];s.find(v=>v.name===y)&&(a=y,r(`History \u8DEF\u7531\u5339\u914D: ${m} -> ${y}`))}}}if(!a)return g();let u=s.find(o=>o.name===a);return u?We(i,u,t,r):g()}catch(f){r(`\u5F00\u53D1\u670D\u52A1\u5668\u5904\u7406\u8BF7\u6C42\u5931\u8D25: ${f}`),g(f)}}),r("\u5F00\u53D1\u670D\u52A1\u5668\u914D\u7F6E\u5B8C\u6210")}catch(n){throw r(`\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668\u5931\u8D25: ${n}`),n}}function We(e,t,r,n){var m;let s={pageName:t.name,filePath:t.file,relativePath:D.relative(process.cwd(),t.file),strategy:void 0,isMatched:!1},l=I(r.pageConfigs,s,n);if(l!=null&&l.strategy)s.strategy=l.strategy;else if((m=r.appliedStrategies)!=null&&m.has(t.name)){let a=r.appliedStrategies.get(t.name);a&&(s.strategy=a)}let c="",i=D.resolve(process.cwd(),`${t.name}.html`);if(H.existsSync(i)?c=i:l!=null&&l.template?c=D.resolve(process.cwd(),l.template):c=D.resolve(process.cwd(),r.template),!H.existsSync(c)){e.statusCode=404,e.end("Template not found");return}let g=H.readFileSync(c,"utf-8");if(g.includes(r.placeholder)){let a=g;if(g=g.split(r.placeholder).join(`/${t.file}`),g===a){let u=me(r.placeholder),o=new RegExp(u,"g");g=a.replace(o,`/${t.file}`),g===a&&(g=a.replace(/\{\{ENTRY_FILE\}\}/g,`/${t.file}`))}}if(l!=null&&l.define){let a=Object.entries(l.define).map(([u,o])=>{let p=typeof o=="string"?`"${o}"`:JSON.stringify(o);return`window.${u} = ${p};`}).join(`
|
|
6
|
+
`);a&&(g=g.replace(/<\/head>/i,`<script type="text/javascript">
|
|
7
|
+
${a}
|
|
8
8
|
</script>
|
|
9
|
-
</head>`))}e.statusCode=200,e.setHeader("Content-Type","text/html"),e.end(g)}function Ye(e,t,r){try{let
|
|
9
|
+
</head>`))}e.statusCode=200,e.setHeader("Content-Type","text/html"),e.end(g)}function Ye(e,t,r){try{let n=e.map(s=>{var f;let l={pageName:s.name,filePath:s.file,relativePath:D.relative(process.cwd(),s.file),strategy:void 0,isMatched:!1},c=I(t.pageConfigs,l,r),i="default";if(c!=null&&c.strategy)i=c.strategy;else if((f=t.appliedStrategies)!=null&&f.has(s.name)){let m=t.appliedStrategies.get(s.name);m&&(i=m)}let g=i!=="default"?`<span class="badge">${i}</span>`:"";return`
|
|
10
10
|
<div class="page-item">
|
|
11
|
-
<a href="${
|
|
12
|
-
${
|
|
11
|
+
<a href="${s.name}.html" class="page-link">
|
|
12
|
+
${s.name}${g}
|
|
13
13
|
</a>
|
|
14
|
-
<div class="page-path">${
|
|
14
|
+
<div class="page-path">${s.file}</div>
|
|
15
15
|
</div>`}).join("");return`
|
|
16
16
|
<!DOCTYPE html>
|
|
17
17
|
<html lang="en">
|
|
@@ -87,11 +87,11 @@ ${i}
|
|
|
87
87
|
\u627E\u5230 ${e.length} \u4E2A\u9875\u9762
|
|
88
88
|
</div>
|
|
89
89
|
<div class="page-list">
|
|
90
|
-
${
|
|
90
|
+
${n}
|
|
91
91
|
</div>
|
|
92
92
|
</body>
|
|
93
93
|
</html>
|
|
94
|
-
`}catch(
|
|
94
|
+
`}catch(n){return r(`\u751F\u6210\u7D22\u5F15\u9875\u5931\u8D25: ${n}`),`
|
|
95
95
|
<!DOCTYPE html>
|
|
96
96
|
<html>
|
|
97
97
|
<head>
|
|
@@ -99,10 +99,10 @@ ${i}
|
|
|
99
99
|
</head>
|
|
100
100
|
<body>
|
|
101
101
|
<h1>\u751F\u6210\u7D22\u5F15\u9875\u65F6\u53D1\u751F\u9519\u8BEF</h1>
|
|
102
|
-
<p>${
|
|
102
|
+
<p>${n}</p>
|
|
103
103
|
</body>
|
|
104
104
|
</html>
|
|
105
|
-
`}}var D,H,Se,be,$e=_(()=>{"use strict";
|
|
105
|
+
`}}var D,H,Se,be,$e=_(()=>{"use strict";C();D=E(require("path")),H=E(require("fs")),Se=require("glob");re();oe();J();be=Ve});function Pe(e){return typeof e=="function"?e:()=>e}function Ce(e){return e}var we=_(()=>{"use strict";C()});var _e={};k(_e,{cleanViteOutputDirectory:()=>ie,default:()=>ze,defineConfig:()=>Pe,defineConfigTransform:()=>Ce,generateBuildConfig:()=>B,getAvailableStrategies:()=>ae,getViteOutputDirectory:()=>L,mergeWithDefaults:()=>V,reorganizeAssetsInCLI:()=>He,viteMultiPage:()=>Te});function Fe(e,t,r,n){let s=b.resolve(e,"assets");if(!h.existsSync(s)){n("assets\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u91CD\u7EC4");return}let l=h.readdirSync(e).filter(a=>a.endsWith(".html")).map(a=>b.resolve(e,a));if(l.length===0){if(n("\u672A\u627E\u5230HTML\u6587\u4EF6\uFF0C\u4F46\u4ECD\u9700\u6E05\u7406assets\u76EE\u5F55"),(t==="strategy"||t==="page")&&h.existsSync(s))try{h.rmSync(s,{recursive:!0,force:!0}),n("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(a){n("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",a)}return}let c=new Map,i=new Map;l.forEach(a=>{var w;let u=b.basename(a,".html");u.startsWith(".temp.mp.")&&(u=u.replace(".temp.mp.",""));let o=h.readFileSync(a,"utf-8"),p=[],y=/(?:src|href)="\/assets\/([^"]+)"/g,v;for(;(v=y.exec(o))!==null;){let P=v[1];p.push(P),i.has(P)||i.set(P,[]),(w=i.get(P))==null||w.push(u)}let S="";t==="page"&&(S=u);let $=b.resolve(e,S);c.set(u,{assets:p,targetDir:$}),n(`\u9875\u9762 ${u} \u4F9D\u8D56\u8D44\u6E90:`,p)}),n("\u7B2C\u4E00\u9636\u6BB5\u8865\u5145\uFF1A\u5206\u6790public\u76EE\u5F55\u8D44\u6E90");let g=new Set,f=b.resolve(process.cwd(),"public");if(h.existsSync(f)){let a=Ee.sync("**/*",{cwd:f,nodir:!0});for(let u of a)g.add(u),n(`\u53D1\u73B0public\u8D44\u6E90: ${u}`)}i.forEach((a,u)=>{a.length>1?n(`\u5171\u4EAB\u8D44\u6E90 ${u} \u88AB\u9875\u9762\u4F7F\u7528:`,a):n(`\u72EC\u5360\u8D44\u6E90 ${u} \u4EC5\u88AB\u9875\u9762 ${a[0]} \u4F7F\u7528`)}),c.forEach(({assets:a,targetDir:u},o)=>{let p=b.resolve(u,"assets");h.existsSync(p)||h.mkdirSync(p,{recursive:!0}),a.forEach(y=>{let v=b.resolve(s,y),S=b.resolve(p,y);if(h.existsSync(v)){h.copyFileSync(v,S);let w=(i.get(y)||[]).length>1?"\u5171\u4EAB\u8D44\u6E90":"\u72EC\u5360\u8D44\u6E90";n(`\u590D\u5236${w}\u5230 ${o}: assets/${y} -> ${b.relative(e,S)}`)}else n(`\u8B66\u544A: \u8D44\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: ${v}`)}),h.existsSync(s)&&h.readdirSync(s).forEach(v=>{if(!a.includes(v)){let S=b.resolve(s,v),$=b.resolve(p,v);h.existsSync(S)&&(h.copyFileSync(S,$),n(`\u590D\u5236\u5176\u4ED6\u8D44\u6E90\u6587\u4EF6\u5230 ${o}: assets/${v} -> ${b.relative(e,$)}`))}})}),n("\u7B2C\u4E09\u9636\u6BB5\u8865\u5145\uFF1A\u5904\u7406public\u76EE\u5F55\u8D44\u6E90");let m=new Set;c.forEach(({targetDir:a})=>{m.add(a)});for(let a of m)for(let u of g){let o=b.resolve(e,u),p=b.resolve(a,u);if(h.existsSync(o)){let y=b.dirname(p);h.existsSync(y)||h.mkdirSync(y,{recursive:!0}),h.copyFileSync(o,p),n(`\u590D\u5236public\u8D44\u6E90: ${u} -> ${b.relative(e,p)}`)}}if(c.forEach(({targetDir:a},u)=>{let o=b.resolve(e,`${u}.html`),p=u;if(h.existsSync(o)||(o=b.resolve(e,`.temp.mp.${u}.html`),h.existsSync(o)&&(p=u)),h.existsSync(o)){let y=h.readFileSync(o,"utf-8");y=y.replace(/(?:src|href)="\/assets\//g,$=>$.replace("/assets/","./assets/"));let v;t==="strategy"?v=b.resolve(a,`${p}.html`):t==="page"?v=b.resolve(a,"index.html"):v=o,h.writeFileSync(v,y),v!==o&&h.unlinkSync(o);let S=b.relative(e,v);n(`\u6309${t}\u5206\u7EC4\u79FB\u52A8HTML\u6587\u4EF6: ${p}.html -> ${S}`)}else n(`\u8B66\u544A: \u672A\u627E\u5230HTML\u6587\u4EF6: ${u}.html \u6216 .temp.mp.${u}.html`)}),h.existsSync(s))if(t==="strategy"||t==="page")try{h.rmSync(s,{recursive:!0,force:!0}),n("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(a){n("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",a)}else{i.forEach((u,o)=>{let p=b.resolve(s,o);h.existsSync(p)&&(h.unlinkSync(p),n(`\u6E05\u7406\u539F\u59CB\u8D44\u6E90\u6587\u4EF6: assets/${o}`))});let a=h.readdirSync(s);a.length===0?(h.rmdirSync(s),n("\u6E05\u7406\u7A7A\u7684assets\u76EE\u5F55")):n("assets\u76EE\u5F55\u4E2D\u8FD8\u6709\u672A\u5904\u7406\u7684\u6587\u4EF6:",a)}(t==="strategy"||t==="page")&&g.size>0&&(n("\u7B2C\u4E94\u9636\u6BB5\u8865\u5145\uFF1A\u6E05\u7406\u6839\u76EE\u5F55\u7684public\u8D44\u6E90"),g.forEach(a=>{let u=b.resolve(e,a);if(h.existsSync(u))try{h.unlinkSync(u),n(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90: ${a}`)}catch(o){n(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90\u5931\u8D25: ${a}`,o)}}),g.forEach(a=>{let u=b.resolve(e,a),o=b.dirname(u);for(;o!==e&&o!==b.dirname(o);)try{if(h.existsSync(o)&&h.readdirSync(o).length===0)h.rmdirSync(o),n(`\u5220\u9664\u7A7A\u76EE\u5F55: ${b.relative(e,o)}`),o=b.dirname(o);else break}catch{break}}))}function Te(e){let t,r=[],n=()=>{};return{name:"vite-multi-page",async configResolved(s){let l=null;Z()&&(l=await ee({mode:s.command==="serve"?"development":"production",command:s.command,isCLI:!1}));let c=V(l);t=e?e(c,{mode:s.command==="serve"?"development":"production",command:s.command,isCLI:!1}):c,n=t.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{},n("Vite\u914D\u7F6E\u5DF2\u89E3\u6790, \u4F7F\u7528\u914D\u7F6E:",{strategies:Object.keys(t.strategies||{}),entry:t.entry})},async config(s,{command:l}){var c;if(l==="serve"){let i=process.argv,g=i.find(f=>f.startsWith("--strategy="));if(g){let f=g.split("=")[1];f&&(process.env.VITE_MULTI_PAGE_STRATEGY=f)}else{let f=i.findIndex(m=>m==="--strategy");if(f!==-1&&f+1<i.length){let m=i[f+1];process.env.VITE_MULTI_PAGE_STRATEGY=m}}process.env.VITE_MULTI_PAGE_STRATEGY||(process.env.VITE_MULTI_PAGE_STRATEGY="default")}if(l==="build"){if(!t){let a=null;Z()&&(a=await ee({mode:"production",command:"build",isCLI:!1}));let u=V(a);t=e?e(u,{mode:"production",command:"build",isCLI:!1}):u,n=t.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{}}n("\u914D\u7F6E\u6784\u5EFA\u6A21\u5F0F");let i=process.env.VITE_MULTI_PAGE_BUILD_SINGLE_PAGE;if(i){n(`\u5355\u9875\u9762\u6784\u5EFA\u6A21\u5F0F: ${i}`);let a=B({entry:t.entry||"src/pages/**/*.{ts,js}",exclude:t.exclude||[],template:t.template||"index.html",placeholder:t.placeholder||"{{ENTRY_FILE}}",merge:t.merge||"all",strategies:t.strategies||{},pageConfigs:t.pageConfigs||{},forceBuildStrategy:void 0,forceBuildPage:i}),u=Object.values(a);if(u.length>0){let o=u[0],p=(0,le.mergeConfig)(s,o);Object.assign(s,p),n(`\u5DF2\u5E94\u7528\u5355\u9875\u9762\u6784\u5EFA\u914D\u7F6E: ${i}`);return}else throw new Error(`\u672A\u627E\u5230\u9875\u9762: ${i}`)}let g=process.env.VITE_MULTI_PAGE_STRATEGY,f=B({entry:t.entry||"src/pages/**/*.{ts,js}",exclude:t.exclude||[],template:t.template||"index.html",placeholder:t.placeholder||"{{ENTRY_FILE}}",merge:t.merge||"all",strategies:t.strategies||{},pageConfigs:t.pageConfigs||{},forceBuildStrategy:g}),m=Object.keys(f)[0];if(m&&f[m]){n(`\u5E94\u7528\u6784\u5EFA\u7B56\u7565: ${m}`);let a=f[m],u=(0,le.mergeConfig)(s,a);Object.assign(s,u),n(`\u5DF2\u5E94\u7528\u7B56\u7565 "${m}" \u7684\u914D\u7F6E:`,{build:!!a.build,define:!!a.define,plugins:((c=a.plugins)==null?void 0:c.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
|
|
106
106
|
|
|
107
107
|
\u53EF\u80FD\u7684\u539F\u56E0\uFF1A
|
|
108
108
|
1. \u914D\u7F6E\u6587\u4EF6\u8FD4\u56DE\u7A7A\u5BF9\u8C61 {}
|
|
@@ -117,7 +117,7 @@ export default () => ({
|
|
|
117
117
|
strategies: {
|
|
118
118
|
default: {}
|
|
119
119
|
}
|
|
120
|
-
});`)}},configureServer(
|
|
120
|
+
});`)}},configureServer(s){if(s.config.command==="serve"){n("\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668");let l=process.env.VITE_MULTI_PAGE_STRATEGY||"default";n(`\u5F00\u53D1\u6A21\u5F0F\u7B56\u7565: ${l}`),be(s,{entry:t.entry||"src/pages/**/*.{ts,js}",exclude:t.exclude||[],template:t.template||"index.html",placeholder:t.placeholder||"{{ENTRY_FILE}}",strategies:t.strategies||{},pageConfigs:t.pageConfigs||{},devStrategy:l},n)}},writeBundle(s){if(!(t!=null&&t.merge)||t.merge==="all")return;let l=s.dir||"dist",c=t.merge;n(`\u5E94\u7528\u6784\u5EFA\u4EA7\u7269\u5408\u5E76\u6A21\u5F0F: ${c}`);try{Fe(l,c,t,n)}catch(i){throw n("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",i),i}},buildEnd(){r.length>0&&(n(`\u6E05\u7406 ${r.length} \u4E2A\u4E34\u65F6\u6587\u4EF6`),r.forEach(s=>{try{h.existsSync(s)&&(h.unlinkSync(s),n(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6: ${s}`))}catch(l){n(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${s}`,l)}}),r.length=0)}}}function He(e,t,r,n){return Fe(e,t,r,n)}var h,b,le,Ee,ze,Oe=_(()=>{"use strict";C();h=E(require("fs")),b=E(require("path")),le=require("vite");$e();U();ce();te();Ee=E(require("glob"));we();U();te();ze=Te});var rt={};k(rt,{buildAll:()=>Me});module.exports=Ue(rt);C();var ge=require("child_process"),d=E(require("fs")),x=E(require("path")),se=E(require("glob"));U();function qe(){let e=process.argv.slice(2),t=[],r=!1,n,s;for(let l=0;l<e.length;l++){let c=e[l];c==="--debug"?r=!0:c==="--cwd"?n=e[++l]:c==="--strategy"?s=e[++l].split(",").map(g=>g.trim()):c==="--help"||c==="-h"?(console.log(`
|
|
121
121
|
\u4F7F\u7528\u65B9\u6CD5: vite-mp [\u9009\u9879]
|
|
122
122
|
|
|
123
123
|
\u9009\u9879:
|
|
@@ -135,11 +135,11 @@ export default () => ({
|
|
|
135
135
|
vite-mp --debug # \u542F\u7528\u8C03\u8BD5\u6A21\u5F0F
|
|
136
136
|
vite-mp --cwd example # \u5728example\u76EE\u5F55\u8FD0\u884C
|
|
137
137
|
vite-mp --mode production --debug # \u4F20\u9012\u989D\u5916\u53C2\u6570\u7ED9vite
|
|
138
|
-
`),process.exit(0)):c!=="build"&&t.push(c)}return{viteBuildArgs:t,debug:r,cwd:s,strategies:n}}async function Je(){let{loadUserConfig:e,hasCustomConfig:t}=await Promise.resolve().then(()=>(ce(),ve)),{mergeWithDefaults:r}=await Promise.resolve().then(()=>(te(),xe)),s=null;return t()&&(s=await e({mode:"production",command:"build",isCLI:!0}),s||console.log("\u274C \u914D\u7F6E\u6587\u4EF6\u52A0\u8F7D\u5931\u8D25")),r(s)}function Qe(e,t,r){return new Promise(s=>{var f;let n=r?console.log.bind(console,`[${e}]`):()=>{};n(`\u5F00\u59CB\u6784\u5EFA\u7B56\u7565: ${e}`);let a={...process.env,VITE_MULTI_PAGE_STRATEGY:e},c=["build",...t];n(`\u6267\u884C\u547D\u4EE4: npx vite ${c.join(" ")}`);let l=(0,ge.spawn)("npx",["vite",...c],{stdio:r?"inherit":"pipe",env:a,cwd:process.cwd()}),g="";r||(f=l.stderr)==null||f.on("data",u=>{g+=u.toString()}),l.on("close",u=>{let i=u===0,p=L(t);if(i){n(`\u2705 \u7B56\u7565 ${e} \u6784\u5EFA\u6210\u529F`);try{if(d.existsSync(p)){let o=d.readdirSync(p);for(let m of o)if(m.startsWith(".temp.mp.")&&m.endsWith(".html")){let x=v.resolve(p,m),S=`${m.replace(/^\.temp\.mp\./,"").replace(/\.html$/,"")}.html`,$=v.resolve(p,S);d.renameSync(x,$),n(`\u91CD\u547D\u540DHTML: ${m} -> ${S}`)}}}catch(o){n("\u91CD\u547D\u540DHTML\u6587\u4EF6\u5931\u8D25:",o)}}else n(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${u})`),!r&&g&&console.error(`\u7B56\u7565 ${e} \u9519\u8BEF\u8F93\u51FA:`,g);s({strategy:e,success:i,error:i?void 0:g||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${u}`,outputDir:p})}),l.on("error",u=>{n(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u51FA\u9519:`,u.message);let i=L(t);s({strategy:e,success:!1,error:u.message,outputDir:i})})})}function Ke(e,t,r,s){return new Promise(n=>{var i;let a=r?console.log.bind(console,`[${e}]`):()=>{};a(`\u5F00\u59CB\u6784\u5EFA\u9875\u9762: ${e}`);let c=v.resolve(process.cwd(),`dist-temp-${e}`),l={...process.env,VITE_MULTI_PAGE_BUILD_SINGLE_PAGE:e,VITE_MULTI_PAGE_TEMP_OUTPUT_DIR:c,VITE_MULTI_PAGE_STRATEGY:s},g=["build","--outDir",c,...t];a(`\u6267\u884C\u547D\u4EE4: npx vite ${g.join(" ")}`);let f=(0,ge.spawn)("npx",["vite",...g],{stdio:r?"inherit":"pipe",env:l,cwd:process.cwd()}),u="";r||(i=f.stderr)==null||i.on("data",p=>{u+=p.toString()}),f.on("close",p=>{let o=p===0;o?a(`\u2705 \u9875\u9762 ${e} \u6784\u5EFA\u6210\u529F`):(a(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${p})`),!r&&u&&console.error(`\u9875\u9762 ${e} \u9519\u8BEF\u8F93\u51FA:`,u)),n({pageName:e,success:o,error:o?void 0:u||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${p}`,outputDir:c})}),f.on("error",p=>{a(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u51FA\u9519:`,p.message),n({pageName:e,success:!1,error:p.message,outputDir:c})})})}async function Xe(e,t,r){let s=r?console.log.bind(console,"[merge]"):()=>{};s("\u5F00\u59CB\u5408\u5E76\u6784\u5EFA\u7ED3\u679C...");let n=t.merge||"all";s(`\u4F7F\u7528\u5408\u5E76\u6A21\u5F0F: ${n}`),n==="all"?await De(e,r):n==="page"&&await et(e,t,r)}async function Ze(e,t,r){let s=r?console.log.bind(console,"[merge]"):()=>{},n=v.resolve(process.cwd(),"dist"),a=v.resolve(process.cwd(),".temp-merge");d.existsSync(a)&&d.rmSync(a,{recursive:!0,force:!0}),d.mkdirSync(a,{recursive:!0});for(let l of e){if(!l.success)continue;let g=l.outputDir;if(!d.existsSync(g)){s(`\u8B66\u544A: \u9875\u9762\u6784\u5EFA\u76EE\u5F55\u4E0D\u5B58\u5728: ${g}`);continue}let f=v.resolve(a,l.pageName);d.mkdirSync(f,{recursive:!0});let u=d.readdirSync(g,{withFileTypes:!0});for(let i of u){let p=v.resolve(g,i.name);if(i.isFile())if(i.name.endsWith(".html")){let o=v.resolve(f,"index.html");d.copyFileSync(p,o)}else{let o=v.resolve(f,i.name);d.copyFileSync(p,o)}else if(i.isDirectory())if(i.name===l.pageName){let o=d.readdirSync(p,{withFileTypes:!0});for(let m of o){let x=v.resolve(p,m.name),h=v.resolve(f,m.name);m.isFile()?d.copyFileSync(x,h):m.isDirectory()&&d.cpSync(x,h,{recursive:!0})}}else{let o=v.resolve(f,i.name);d.cpSync(p,o,{recursive:!0})}}}let c=v.resolve(v.dirname(n),".dist-backup");d.existsSync(c)&&d.rmSync(c,{recursive:!0,force:!0}),d.existsSync(n)&&d.renameSync(n,c);try{d.renameSync(a,n)}catch{d.cpSync(a,n,{recursive:!0}),d.rmSync(a,{recursive:!0,force:!0})}d.existsSync(c)&&d.rmSync(c,{recursive:!0,force:!0});for(let l of e)l.outputDir&&d.existsSync(l.outputDir)&&d.rmSync(l.outputDir,{recursive:!0,force:!0})}async function De(e,t){let r=t?console.log.bind(console,"[merge]"):()=>{},s=v.resolve(process.cwd(),"dist"),n=v.resolve(s,"assets");d.existsSync(n)||d.mkdirSync(n,{recursive:!0});let a=[];for(let c of e){if(!c.success)continue;let l=v.resolve(s,c.strategy);if(!d.existsSync(l)){r(`\u8B66\u544A: \u7B56\u7565\u76EE\u5F55\u4E0D\u5B58\u5728: ${l}`);continue}r(`\u5904\u7406\u7B56\u7565: ${c.strategy}`);let g=d.readdirSync(l,{withFileTypes:!0});for(let f of g){let u=v.resolve(l,f.name);if(f.isFile())if(f.name.endsWith(".html")){let i=v.resolve(s,f.name);d.copyFileSync(u,i),a.push(f.name),r(`\u590D\u5236HTML: ${f.name} -> dist/${f.name}`)}else{let i=v.resolve(s,f.name);d.copyFileSync(u,i),r(`\u590D\u5236\u6587\u4EF6: ${f.name} -> dist/${f.name}`)}else if(f.isDirectory()&&f.name==="assets"){let i=u,p=d.readdirSync(i,{withFileTypes:!0});for(let o of p){let m=v.resolve(i,o.name),x=v.resolve(n,o.name);if(o.isFile())if(d.existsSync(x)){let h=d.readFileSync(m),S=d.readFileSync(x);if(h.equals(S))r(`\u8DF3\u8FC7\u91CD\u590D\u8D44\u6E90: ${o.name}`);else{let $=v.extname(o.name),C=`${v.basename(o.name,$)}-${c.strategy}${$}`,A=v.resolve(n,C);d.copyFileSync(m,A),r(`\u590D\u5236\u8D44\u6E90(\u91CD\u547D\u540D): ${o.name} -> assets/${C}`)}}else d.copyFileSync(m,x),r(`\u590D\u5236\u8D44\u6E90: ${o.name} -> assets/${o.name}`);else if(o.isDirectory()){let h=v.resolve(n,o.name);d.existsSync(h)||d.mkdirSync(h,{recursive:!0}),d.cpSync(m,h,{recursive:!0}),r(`\u590D\u5236\u8D44\u6E90\u76EE\u5F55: ${o.name} -> assets/${o.name}`)}}}else if(f.isDirectory()){let i=v.resolve(s,f.name);d.cpSync(u,i,{recursive:!0}),r(`\u590D\u5236\u76EE\u5F55: ${f.name} -> dist/${f.name}`)}}}r("\u2705 \u6784\u5EFA\u7ED3\u679C\u5408\u5E76\u5B8C\u6210"),r(`\u{1F4C1} \u751F\u6210\u9875\u9762: ${a.join(", ")}`),r("\u{1F4E6} \u8D44\u6E90\u76EE\u5F55: dist/assets/"),r(`\u{1F527} \u5904\u7406\u7B56\u7565: ${e.filter(c=>c.success).map(c=>c.strategy).join(", ")}`)}async function et(e,t,r){let s=r?console.log.bind(console,"[merge]"):()=>{};await De(e,r);let n=v.resolve(process.cwd(),"dist"),a=t.merge;s(`\u5E94\u7528${a}\u6A21\u5F0F\u7684\u8D44\u6E90\u91CD\u7EC4...`);try{let{reorganizeAssetsInCLI:c}=await Promise.resolve().then(()=>(Oe(),_e));await c(n,a,t,s),s(`\u2705 ${a}\u6A21\u5F0F\u8D44\u6E90\u91CD\u7EC4\u5B8C\u6210`)}catch(c){throw s("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",c),c}}async function fe(e){let t=se.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let r of t){let s=v.resolve(process.cwd(),r);try{d.unlinkSync(s)}catch{}}}async function tt(e,t,r){let s=r?console.log.bind(console,"[cleanup]"):()=>{};s("\u6E05\u7406\u4E34\u65F6\u6587\u4EF6...");let n=t.merge||"all",a=se.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let c of a){let l=v.resolve(process.cwd(),c);try{d.unlinkSync(l),s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}`)}catch(g){s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}`,g)}}for(let c of e){let l=v.resolve(process.cwd(),"dist",c);if(d.existsSync(l)){let g=se.sync("*.mp.temp.html",{cwd:l});for(let f of g){let u=v.resolve(l,f);try{d.unlinkSync(u),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}/${f}`)}catch(i){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}/${f}`,i)}}}}if(n==="all"){let c=v.resolve(process.cwd(),"dist");for(let l of e){let g=v.resolve(c,l);if(d.existsSync(g))try{d.rmSync(g,{recursive:!0,force:!0}),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55: ${l}`)}catch(f){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u5931\u8D25: ${l}`,f)}}}else s(`\u4FDD\u7559\u7B56\u7565\u76EE\u5F55 (merge\u6A21\u5F0F: ${n})`);s("\u2705 \u6E05\u7406\u5B8C\u6210")}async function Me(){let{viteBuildArgs:e,debug:t,cwd:r,strategies:s}=qe(),n=t?console.log.bind(console,"[main]"):()=>{};if(r){let a=v.resolve(process.cwd(),r);d.existsSync(a)||(console.error(`\u274C \u6307\u5B9A\u7684\u76EE\u5F55\u4E0D\u5B58\u5728: ${a}`),process.exit(1)),process.chdir(a),n(`\u5207\u6362\u5DE5\u4F5C\u76EE\u5F55\u5230: ${a}`)}try{n("\u{1F4CB} \u52A0\u8F7D\u914D\u7F6E...");let a=await Je(),c=a.merge||"all";n("\u{1F9F9} \u6E05\u7406\u8F93\u51FA\u76EE\u5F55...");let{cleanViteOutputDirectory:l}=await Promise.resolve().then(()=>(U(),X));l(e),c==="page"?await st(a,e,t):await nt(a,e,t,s)}catch(a){console.error("\u274C \u6784\u5EFA\u5931\u8D25:",a instanceof Error?a.message:a),process.exit(1)}}async function st(e,t,r){let s=r?console.log.bind(console,"[page-mode]"):()=>{};s("\u{1F680} \u5F00\u59CBPage\u6A21\u5F0F\u6784\u5EFA...");let{discoverPages:n}=await Promise.resolve().then(()=>(U(),X)),a=n({entry:e.entry||"src/pages/*/main.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",pageConfigs:e.pageConfigs||{},strategies:e.strategies||{}});if(a.length===0)throw new Error("\u672A\u627E\u5230\u4EFB\u4F55\u9875\u9762");s(`\u53D1\u73B0\u9875\u9762: ${a.map(o=>o.name).join(", ")}`);let{getPageConfig:c}=await Promise.resolve().then(()=>(J(),ue)),l=new Map;for(let o of a){let m={pageName:o.name,filePath:o.file,relativePath:v.relative(process.cwd(),o.file)},x=c(e.pageConfigs,m,()=>{}),h=(x==null?void 0:x.strategy)||"default";l.set(o.name,h)}s("\u{1F528} \u5F00\u59CB\u5E76\u884C\u6784\u5EFA\u9875\u9762...");let g=a.map(o=>{let m=l.get(o.name)||"default";return Ke(o.name,t,r,m)}),f=await Promise.all(g),u=f.filter(o=>o.success).length,i=f.length-u;console.log(`
|
|
139
|
-
\u{1F4CA} \u9875\u9762\u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${
|
|
140
|
-
\u274C \u5931\u8D25\u7684\u9875\u9762:`),f.filter(o=>!o.success).forEach(o=>{console.log(` - ${o.pageName}: ${o.error}`)}),await fe(r),process.exit(1)),await Ze(f,e,r),await fe(r);let
|
|
141
|
-
\u{1F389} \u6240\u6709\u9875\u9762\u6784\u5EFA\u6210\u529F\uFF01`),console.log("\u{1F4C1} \u6784\u5EFA\u7ED3\u679C\u4F4D\u4E8E: dist/"),console.log(`\u{1F4E6} \u6784\u5EFA\u9875\u9762: ${
|
|
142
|
-
\u53EF\u7528\u7B56\u7565: ${c.join(", ")}`);
|
|
143
|
-
\u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${
|
|
144
|
-
\u274C \u5931\u8D25\u7684\u7B56\u7565:`),f.filter(
|
|
145
|
-
\u{1F389} \u6240\u6709\u7B56\u7565\u6784\u5EFA\u6210\u529F\uFF01`),console.log("\u{1F4C1} \u6784\u5EFA\u7ED3\u679C\u4F4D\u4E8E: dist/"),console.log(`\u{1F310} \u751F\u6210\u7684\u9875\u9762: ${o.join(", ")}`),console.log(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${
|
|
138
|
+
`),process.exit(0)):c!=="build"&&t.push(c)}return{viteBuildArgs:t,debug:r,cwd:n,strategies:s}}async function Je(){let{loadUserConfig:e,hasCustomConfig:t}=await Promise.resolve().then(()=>(ce(),ve)),{mergeWithDefaults:r}=await Promise.resolve().then(()=>(te(),xe)),n=null;return t()&&(n=await e({mode:"production",command:"build",isCLI:!0}),n||console.log("\u274C \u914D\u7F6E\u6587\u4EF6\u52A0\u8F7D\u5931\u8D25")),r(n)}function Qe(e,t,r){return new Promise(n=>{var f;let s=r?console.log.bind(console,`[${e}]`):()=>{};s(`\u5F00\u59CB\u6784\u5EFA\u7B56\u7565: ${e}`);let l={...process.env,VITE_MULTI_PAGE_STRATEGY:e},c=["build",...t];s(`\u6267\u884C\u547D\u4EE4: npx vite ${c.join(" ")}`);let i=(0,ge.spawn)("npx",["vite",...c],{stdio:r?"inherit":"pipe",env:l,cwd:process.cwd(),shell:process.platform==="win32"}),g="";r||(f=i.stderr)==null||f.on("data",m=>{g+=m.toString()}),i.on("close",m=>{let a=m===0,u=L(t);if(a){s(`\u2705 \u7B56\u7565 ${e} \u6784\u5EFA\u6210\u529F`);try{if(d.existsSync(u)){let o=d.readdirSync(u);for(let p of o)if(p.startsWith(".temp.mp.")&&p.endsWith(".html")){let y=x.resolve(u,p),S=`${p.replace(/^\.temp\.mp\./,"").replace(/\.html$/,"")}.html`,$=x.resolve(u,S);d.renameSync(y,$),s(`\u91CD\u547D\u540DHTML: ${p} -> ${S}`)}}}catch(o){s("\u91CD\u547D\u540DHTML\u6587\u4EF6\u5931\u8D25:",o)}}else s(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${m})`),!r&&g&&console.error(`\u7B56\u7565 ${e} \u9519\u8BEF\u8F93\u51FA:`,g);n({strategy:e,success:a,error:a?void 0:g||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${m}`,outputDir:u})}),i.on("error",m=>{s(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u51FA\u9519:`,m.message);let a=L(t);n({strategy:e,success:!1,error:m.message,outputDir:a})})})}function Ke(e,t,r,n,s,l){return new Promise(c=>{var o;let i=r?console.log.bind(console,`[${e}]`):()=>{};i(`\u5F00\u59CB\u6784\u5EFA\u9875\u9762: ${e}`);let g=x.resolve(process.cwd(),`dist-temp-${e}`),f={...process.env,VITE_MULTI_PAGE_BUILD_SINGLE_PAGE:e,VITE_MULTI_PAGE_TEMP_OUTPUT_DIR:g,VITE_MULTI_PAGE_STRATEGY:n,VITE_MULTI_PAGE_CURRENT_PAGE:e,VITE_MULTI_PAGE_MERGE_MODE:s.merge||"all"};if(s.pageEnvs&&typeof s.pageEnvs=="function")try{let p={pageName:e,filePath:l.file,relativePath:x.relative(process.cwd(),l.file),strategy:n},y=s.pageEnvs(p);if(y&&typeof y=="object"){for(let[v,S]of Object.entries(y))f[v]=String(S);i("\u6CE8\u5165\u81EA\u5B9A\u4E49\u73AF\u5883\u53D8\u91CF:",Object.keys(y))}}catch(p){i("\u8B66\u544A: \u83B7\u53D6\u9875\u9762\u73AF\u5883\u53D8\u91CF\u5931\u8D25:",p)}let m=["build","--outDir",g,...t];i(`\u6267\u884C\u547D\u4EE4: npx vite ${m.join(" ")}`);let a=(0,ge.spawn)("npx",["vite",...m],{stdio:r?"inherit":"pipe",env:f,cwd:process.cwd(),shell:process.platform==="win32"}),u="";r||(o=a.stderr)==null||o.on("data",p=>{u+=p.toString()}),a.on("close",p=>{let y=p===0;y?i(`\u2705 \u9875\u9762 ${e} \u6784\u5EFA\u6210\u529F`):(i(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${p})`),!r&&u&&console.error(`\u9875\u9762 ${e} \u9519\u8BEF\u8F93\u51FA:`,u)),c({pageName:e,success:y,error:y?void 0:u||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${p}`,outputDir:g})}),a.on("error",p=>{i(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u51FA\u9519:`,p.message),c({pageName:e,success:!1,error:p.message,outputDir:g})})})}async function Xe(e,t,r){let n=r?console.log.bind(console,"[merge]"):()=>{};n("\u5F00\u59CB\u5408\u5E76\u6784\u5EFA\u7ED3\u679C...");let s=t.merge||"all";n(`\u4F7F\u7528\u5408\u5E76\u6A21\u5F0F: ${s}`),s==="all"?await De(e,r):s==="page"&&await et(e,t,r)}async function Ze(e,t,r){let n=r?console.log.bind(console,"[merge]"):()=>{},s=x.resolve(process.cwd(),"dist"),l=x.resolve(process.cwd(),".temp-merge");d.existsSync(l)&&d.rmSync(l,{recursive:!0,force:!0}),d.mkdirSync(l,{recursive:!0});for(let i of e){if(!i.success)continue;let g=i.outputDir;if(!d.existsSync(g)){n(`\u8B66\u544A: \u9875\u9762\u6784\u5EFA\u76EE\u5F55\u4E0D\u5B58\u5728: ${g}`);continue}let f=x.resolve(l,i.pageName);d.mkdirSync(f,{recursive:!0});let m=d.readdirSync(g,{withFileTypes:!0});for(let a of m){let u=x.resolve(g,a.name);if(a.isFile())if(a.name.endsWith(".html")){let o=x.resolve(f,"index.html");d.copyFileSync(u,o)}else{let o=x.resolve(f,a.name);d.copyFileSync(u,o)}else if(a.isDirectory())if(a.name===i.pageName){let o=d.readdirSync(u,{withFileTypes:!0});for(let p of o){let y=x.resolve(u,p.name),v=x.resolve(f,p.name);p.isFile()?d.copyFileSync(y,v):p.isDirectory()&&d.cpSync(y,v,{recursive:!0})}}else{let o=x.resolve(f,a.name);d.cpSync(u,o,{recursive:!0})}}}let c=x.resolve(x.dirname(s),".dist-backup");d.existsSync(c)&&d.rmSync(c,{recursive:!0,force:!0}),d.existsSync(s)&&d.renameSync(s,c);try{d.renameSync(l,s)}catch{d.cpSync(l,s,{recursive:!0}),d.rmSync(l,{recursive:!0,force:!0})}d.existsSync(c)&&d.rmSync(c,{recursive:!0,force:!0});for(let i of e)i.outputDir&&d.existsSync(i.outputDir)&&d.rmSync(i.outputDir,{recursive:!0,force:!0})}async function De(e,t){let r=t?console.log.bind(console,"[merge]"):()=>{},n=x.resolve(process.cwd(),"dist"),s=x.resolve(n,"assets");d.existsSync(s)||d.mkdirSync(s,{recursive:!0});let l=[];for(let c of e){if(!c.success)continue;let i=x.resolve(n,c.strategy);if(!d.existsSync(i)){r(`\u8B66\u544A: \u7B56\u7565\u76EE\u5F55\u4E0D\u5B58\u5728: ${i}`);continue}r(`\u5904\u7406\u7B56\u7565: ${c.strategy}`);let g=d.readdirSync(i,{withFileTypes:!0});for(let f of g){let m=x.resolve(i,f.name);if(f.isFile())if(f.name.endsWith(".html")){let a=x.resolve(n,f.name);d.copyFileSync(m,a),l.push(f.name),r(`\u590D\u5236HTML: ${f.name} -> dist/${f.name}`)}else{let a=x.resolve(n,f.name);d.copyFileSync(m,a),r(`\u590D\u5236\u6587\u4EF6: ${f.name} -> dist/${f.name}`)}else if(f.isDirectory()&&f.name==="assets"){let a=m,u=d.readdirSync(a,{withFileTypes:!0});for(let o of u){let p=x.resolve(a,o.name),y=x.resolve(s,o.name);if(o.isFile())if(d.existsSync(y)){let v=d.readFileSync(p),S=d.readFileSync(y);if(v.equals(S))r(`\u8DF3\u8FC7\u91CD\u590D\u8D44\u6E90: ${o.name}`);else{let $=x.extname(o.name),P=`${x.basename(o.name,$)}-${c.strategy}${$}`,A=x.resolve(s,P);d.copyFileSync(p,A),r(`\u590D\u5236\u8D44\u6E90(\u91CD\u547D\u540D): ${o.name} -> assets/${P}`)}}else d.copyFileSync(p,y),r(`\u590D\u5236\u8D44\u6E90: ${o.name} -> assets/${o.name}`);else if(o.isDirectory()){let v=x.resolve(s,o.name);d.existsSync(v)||d.mkdirSync(v,{recursive:!0}),d.cpSync(p,v,{recursive:!0}),r(`\u590D\u5236\u8D44\u6E90\u76EE\u5F55: ${o.name} -> assets/${o.name}`)}}}else if(f.isDirectory()){let a=x.resolve(n,f.name);d.cpSync(m,a,{recursive:!0}),r(`\u590D\u5236\u76EE\u5F55: ${f.name} -> dist/${f.name}`)}}}r("\u2705 \u6784\u5EFA\u7ED3\u679C\u5408\u5E76\u5B8C\u6210"),r(`\u{1F4C1} \u751F\u6210\u9875\u9762: ${l.join(", ")}`),r("\u{1F4E6} \u8D44\u6E90\u76EE\u5F55: dist/assets/"),r(`\u{1F527} \u5904\u7406\u7B56\u7565: ${e.filter(c=>c.success).map(c=>c.strategy).join(", ")}`)}async function et(e,t,r){let n=r?console.log.bind(console,"[merge]"):()=>{};await De(e,r);let s=x.resolve(process.cwd(),"dist"),l=t.merge;n(`\u5E94\u7528${l}\u6A21\u5F0F\u7684\u8D44\u6E90\u91CD\u7EC4...`);try{let{reorganizeAssetsInCLI:c}=await Promise.resolve().then(()=>(Oe(),_e));await c(s,l,t,n),n(`\u2705 ${l}\u6A21\u5F0F\u8D44\u6E90\u91CD\u7EC4\u5B8C\u6210`)}catch(c){throw n("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",c),c}}async function fe(e){let t=se.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let r of t){let n=x.resolve(process.cwd(),r);try{d.unlinkSync(n)}catch{}}}async function tt(e,t,r){let n=r?console.log.bind(console,"[cleanup]"):()=>{};n("\u6E05\u7406\u4E34\u65F6\u6587\u4EF6...");let s=t.merge||"all",l=se.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let c of l){let i=x.resolve(process.cwd(),c);try{d.unlinkSync(i),n(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}`)}catch(g){n(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}`,g)}}for(let c of e){let i=x.resolve(process.cwd(),"dist",c);if(d.existsSync(i)){let g=se.sync("*.mp.temp.html",{cwd:i});for(let f of g){let m=x.resolve(i,f);try{d.unlinkSync(m),n(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}/${f}`)}catch(a){n(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}/${f}`,a)}}}}if(s==="all"){let c=x.resolve(process.cwd(),"dist");for(let i of e){let g=x.resolve(c,i);if(d.existsSync(g))try{d.rmSync(g,{recursive:!0,force:!0}),n(`\u5220\u9664\u7B56\u7565\u76EE\u5F55: ${i}`)}catch(f){n(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u5931\u8D25: ${i}`,f)}}}else n(`\u4FDD\u7559\u7B56\u7565\u76EE\u5F55 (merge\u6A21\u5F0F: ${s})`);n("\u2705 \u6E05\u7406\u5B8C\u6210")}async function Me(){let{viteBuildArgs:e,debug:t,cwd:r,strategies:n}=qe(),s=t?console.log.bind(console,"[main]"):()=>{};if(r){let l=x.resolve(process.cwd(),r);d.existsSync(l)||(console.error(`\u274C \u6307\u5B9A\u7684\u76EE\u5F55\u4E0D\u5B58\u5728: ${l}`),process.exit(1)),process.chdir(l),s(`\u5207\u6362\u5DE5\u4F5C\u76EE\u5F55\u5230: ${l}`)}try{s("\u{1F4CB} \u52A0\u8F7D\u914D\u7F6E...");let l=await Je(),c=l.merge||"all";s("\u{1F9F9} \u6E05\u7406\u8F93\u51FA\u76EE\u5F55...");let{cleanViteOutputDirectory:i}=await Promise.resolve().then(()=>(U(),X));i(e),c==="page"?await st(l,e,t):await nt(l,e,t,n)}catch(l){console.error("\u274C \u6784\u5EFA\u5931\u8D25:",l instanceof Error?l.message:l),process.exit(1)}}async function st(e,t,r){let n=r?console.log.bind(console,"[page-mode]"):()=>{};n("\u{1F680} \u5F00\u59CBPage\u6A21\u5F0F\u6784\u5EFA...");let{discoverPages:s}=await Promise.resolve().then(()=>(U(),X)),l=s({entry:e.entry||"src/pages/*/main.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",pageConfigs:e.pageConfigs||{},strategies:e.strategies||{}});if(l.length===0)throw new Error("\u672A\u627E\u5230\u4EFB\u4F55\u9875\u9762");n(`\u53D1\u73B0\u9875\u9762: ${l.map(o=>o.name).join(", ")}`);let{getPageConfig:c}=await Promise.resolve().then(()=>(J(),ue)),i=new Map;for(let o of l){let p={pageName:o.name,filePath:o.file,relativePath:x.relative(process.cwd(),o.file)},y=c(e.pageConfigs,p,()=>{}),v=(y==null?void 0:y.strategy)||"default";i.set(o.name,v)}n("\u{1F528} \u5F00\u59CB\u5E76\u884C\u6784\u5EFA\u9875\u9762...");let g=l.map(o=>{let p=i.get(o.name)||"default";return Ke(o.name,t,r,p,e,o)}),f=await Promise.all(g),m=f.filter(o=>o.success).length,a=f.length-m;console.log(`
|
|
139
|
+
\u{1F4CA} \u9875\u9762\u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${m}`),console.log(`\u274C \u5931\u8D25: ${a}`),a>0&&(console.log(`
|
|
140
|
+
\u274C \u5931\u8D25\u7684\u9875\u9762:`),f.filter(o=>!o.success).forEach(o=>{console.log(` - ${o.pageName}: ${o.error}`)}),await fe(r),process.exit(1)),await Ze(f,e,r),await fe(r);let u=f.filter(o=>o.success);console.log(`
|
|
141
|
+
\u{1F389} \u6240\u6709\u9875\u9762\u6784\u5EFA\u6210\u529F\uFF01`),console.log("\u{1F4C1} \u6784\u5EFA\u7ED3\u679C\u4F4D\u4E8E: dist/"),console.log(`\u{1F4E6} \u6784\u5EFA\u9875\u9762: ${u.map(o=>o.pageName).join(", ")}`)}async function nt(e,t,r,n){let s=r?console.log.bind(console,"[strategy-mode]"):()=>{};s("\u{1F680} \u5F00\u59CB\u7B56\u7565\u6A21\u5F0F\u6784\u5EFA...");let{getAvailableStrategies:l}=await Promise.resolve().then(()=>(U(),X)),c=l({entry:e.entry||"src/pages/*/main.{ts,js}",exclude:e.exclude||[],template:e.template||"index.html",placeholder:e.placeholder||"{{ENTRY_FILE}}",pageConfigs:e.pageConfigs||{},strategies:e.strategies||{}});if(c.length===0)throw new Error("\u672A\u627E\u5230\u4EFB\u4F55\u6784\u5EFA\u7B56\u7565");let i;if(n&&n.length>0){let p=n.filter(y=>!c.includes(y));if(p.length>0)throw new Error(`\u6307\u5B9A\u7684\u7B56\u7565\u4E0D\u5B58\u5728: ${p.join(", ")}
|
|
142
|
+
\u53EF\u7528\u7B56\u7565: ${c.join(", ")}`);i=n,s(`\u4F7F\u7528\u6307\u5B9A\u7684\u7B56\u7565: ${i.join(", ")}`)}else i=c,s(`\u6784\u5EFA\u6240\u6709\u53EF\u7528\u7B56\u7565: ${i.join(", ")}`);s("\u{1F528} \u5F00\u59CB\u5E76\u884C\u6784\u5EFA...");let g=i.map(p=>Qe(p,t,r)),f=await Promise.all(g),m=f.filter(p=>p.success).length,a=f.length-m;console.log(`
|
|
143
|
+
\u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${m}`),console.log(`\u274C \u5931\u8D25: ${a}`),a>0&&(console.log(`
|
|
144
|
+
\u274C \u5931\u8D25\u7684\u7B56\u7565:`),f.filter(p=>!p.success).forEach(p=>{console.log(` - ${p.strategy}: ${p.error}`)}),await fe(r),process.exit(1)),s("\u{1F4E6} \u5408\u5E76\u6784\u5EFA\u7ED3\u679C..."),await Xe(f,e,r),await tt(i,e,r);let u=f.filter(p=>p.success),o=d.readdirSync(x.resolve(process.cwd(),"dist")).filter(p=>p.endsWith(".html"));console.log(`
|
|
145
|
+
\u{1F389} \u6240\u6709\u7B56\u7565\u6784\u5EFA\u6210\u529F\uFF01`),console.log("\u{1F4C1} \u6784\u5EFA\u7ED3\u679C\u4F4D\u4E8E: dist/"),console.log(`\u{1F310} \u751F\u6210\u7684\u9875\u9762: ${o.join(", ")}`),console.log(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${u.map(p=>p.strategy).join(", ")}`)}require.main===module&&Me().catch(e=>{console.error("\u274C \u672A\u5904\u7406\u7684\u9519\u8BEF:",e),process.exit(1)});0&&(module.exports={buildAll});
|
package/dist/index.d.mts
CHANGED
|
@@ -9,6 +9,7 @@ interface MultiPageOptions {
|
|
|
9
9
|
merge?: 'all' | 'page';
|
|
10
10
|
strategies?: Record<string, ConfigStrategy>;
|
|
11
11
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
12
|
+
pageEnvs?: PageEnvFunction;
|
|
12
13
|
__forceBuildStrategy?: string;
|
|
13
14
|
}
|
|
14
15
|
type Options = MultiPageOptions;
|
|
@@ -20,6 +21,7 @@ interface BuildConfigOptions {
|
|
|
20
21
|
merge?: 'all' | 'page';
|
|
21
22
|
strategies?: Record<string, ConfigStrategy>;
|
|
22
23
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
24
|
+
pageEnvs?: PageEnvFunction;
|
|
23
25
|
forceBuildStrategy?: string;
|
|
24
26
|
forceBuildPage?: string;
|
|
25
27
|
}
|
|
@@ -41,6 +43,7 @@ interface PageContext {
|
|
|
41
43
|
isMatched?: boolean;
|
|
42
44
|
}
|
|
43
45
|
type PageConfigFunction = (context: PageContext) => PageConfig | null;
|
|
46
|
+
type PageEnvFunction = (context: PageContext) => Record<string, string> | null;
|
|
44
47
|
interface PluginContext {
|
|
45
48
|
mode: string;
|
|
46
49
|
command: 'build' | 'serve';
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ interface MultiPageOptions {
|
|
|
9
9
|
merge?: 'all' | 'page';
|
|
10
10
|
strategies?: Record<string, ConfigStrategy>;
|
|
11
11
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
12
|
+
pageEnvs?: PageEnvFunction;
|
|
12
13
|
__forceBuildStrategy?: string;
|
|
13
14
|
}
|
|
14
15
|
type Options = MultiPageOptions;
|
|
@@ -20,6 +21,7 @@ interface BuildConfigOptions {
|
|
|
20
21
|
merge?: 'all' | 'page';
|
|
21
22
|
strategies?: Record<string, ConfigStrategy>;
|
|
22
23
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
24
|
+
pageEnvs?: PageEnvFunction;
|
|
23
25
|
forceBuildStrategy?: string;
|
|
24
26
|
forceBuildPage?: string;
|
|
25
27
|
}
|
|
@@ -41,6 +43,7 @@ interface PageContext {
|
|
|
41
43
|
isMatched?: boolean;
|
|
42
44
|
}
|
|
43
45
|
type PageConfigFunction = (context: PageContext) => PageConfig | null;
|
|
46
|
+
type PageEnvFunction = (context: PageContext) => Record<string, string> | null;
|
|
44
47
|
interface PluginContext {
|
|
45
48
|
mode: string;
|
|
46
49
|
command: 'build' | 'serve';
|