@fchc8/vite-plugin-multi-page 1.10.0 → 1.10.2
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 +12 -12
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +7 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
|
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: ${
|
|
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(
|
|
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 @@ ${o}
|
|
|
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 @@ ${o}
|
|
|
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,
|
|
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 qe(){let{loadUserConfig:e,hasCustomConfig:t}=await Promise.resolve().then(()=>(ce(),he)),{mergeWithDefaults:r}=await Promise.resolve().then(()=>(ee(),xe)),s=null;return t()?s=await e({mode:"production",command:"build",isCLI:!0}):console.log("\u2139\uFE0F \u672A\u627E\u5230\u914D\u7F6E\u6587\u4EF6\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E"),r(s)}function Je(e,t,r){return new Promise(s=>{var g;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 i=(0,fe.spawn)("npx",["vite",...c],{stdio:r?"inherit":"pipe",env:a,cwd:process.cwd()}),l="";r||(g=i.stderr)==null||g.on("data",u=>{l+=u.toString()}),i.on("close",u=>{let o=u===0,p=A(t);if(o){n(`\u2705 \u7B56\u7565 ${e} \u6784\u5EFA\u6210\u529F`);try{if(d.existsSync(p)){let f=d.readdirSync(p);for(let m of f)if(m.startsWith(".temp.mp.")&&m.endsWith(".html")){let $=x.resolve(p,m),v=`${m.replace(/^\.temp\.mp\./,"").replace(/\.html$/,"")}.html`,b=x.resolve(p,v);d.renameSync($,b),n(`\u91CD\u547D\u540DHTML: ${m} -> ${v}`)}}}catch(f){n("\u91CD\u547D\u540DHTML\u6587\u4EF6\u5931\u8D25:",f)}}else n(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${u})`),!r&&l&&console.error(`\u7B56\u7565 ${e} \u9519\u8BEF\u8F93\u51FA:`,l);s({strategy:e,success:o,error:o?void 0:l||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${u}`,outputDir:p})}),i.on("error",u=>{n(`\u274C \u7B56\u7565 ${e} \u6784\u5EFA\u51FA\u9519:`,u.message);let o=A(t);s({strategy:e,success:!1,error:u.message,outputDir:o})})})}function Qe(e,t,r){return new Promise(s=>{var u;let n=r?console.log.bind(console,`[${e}]`):()=>{};n(`\u5F00\u59CB\u6784\u5EFA\u9875\u9762: ${e}`);let a=x.resolve(process.cwd(),`dist-temp-${e}`),c={...process.env,VITE_MULTI_PAGE_BUILD_SINGLE_PAGE:e,VITE_MULTI_PAGE_TEMP_OUTPUT_DIR:a},i=["build","--outDir",a,...t];n(`\u6267\u884C\u547D\u4EE4: npx vite ${i.join(" ")}`);let l=(0,fe.spawn)("npx",["vite",...i],{stdio:r?"inherit":"pipe",env:c,cwd:process.cwd()}),g="";r||(u=l.stderr)==null||u.on("data",o=>{g+=o.toString()}),l.on("close",o=>{let p=o===0;p?n(`\u2705 \u9875\u9762 ${e} \u6784\u5EFA\u6210\u529F`):(n(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${o})`),!r&&g&&console.error(`\u9875\u9762 ${e} \u9519\u8BEF\u8F93\u51FA:`,g)),s({pageName:e,success:p,error:p?void 0:g||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${o}`,outputDir:a})}),l.on("error",o=>{n(`\u274C \u9875\u9762 ${e} \u6784\u5EFA\u51FA\u9519:`,o.message),s({pageName:e,success:!1,error:o.message,outputDir:a})})})}async function Ke(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 Oe(e,r):n==="page"&&await Ze(e,t,r)}async function Xe(e,t,r){let s=r?console.log.bind(console,"[merge]"):()=>{};s("\u5F00\u59CB\u5408\u5E76\u9875\u9762\u6784\u5EFA\u7ED3\u679C..."),s("page\u6A21\u5F0F\uFF1A\u6BCF\u4E2A\u9875\u9762\u72EC\u7ACB\u5B58\u653E\u5728\u81EA\u5DF1\u7684\u76EE\u5F55\u4E2D");let n=x.resolve(process.cwd(),"dist"),a=x.resolve(process.cwd(),".temp-merge");d.existsSync(a)&&d.rmSync(a,{recursive:!0,force:!0}),d.mkdirSync(a,{recursive:!0});for(let i of e){if(!i.success)continue;let l=i.outputDir;if(!d.existsSync(l)){s(`\u8B66\u544A: \u9875\u9762\u6784\u5EFA\u76EE\u5F55\u4E0D\u5B58\u5728: ${l}`);continue}s(`\u5904\u7406\u9875\u9762: ${i.pageName}`);let g=x.resolve(a,i.pageName);d.mkdirSync(g,{recursive:!0});let u=d.readdirSync(l,{withFileTypes:!0});for(let o of u){let p=x.resolve(l,o.name);if(o.isFile())if(o.name.endsWith(".html")){let f=x.resolve(g,"index.html");d.copyFileSync(p,f),s(`\u590D\u5236HTML: ${o.name} -> ${i.pageName}/index.html`)}else{let f=x.resolve(g,o.name);d.copyFileSync(p,f),s(`\u590D\u5236\u6587\u4EF6: ${o.name} -> ${i.pageName}/${o.name}`)}else if(o.isDirectory())if(o.name===i.pageName){let f=d.readdirSync(p,{withFileTypes:!0});for(let m of f){let $=x.resolve(p,m.name),h=x.resolve(g,m.name);m.isFile()?d.copyFileSync($,h):m.isDirectory()&&d.cpSync($,h,{recursive:!0})}s(`\u590D\u5236\u76EE\u5F55\u5185\u5BB9: ${o.name}/* -> ${i.pageName}/`)}else{let f=x.resolve(g,o.name);d.cpSync(p,f,{recursive:!0}),s(`\u590D\u5236\u76EE\u5F55: ${o.name} -> ${i.pageName}/${o.name}`)}}}let c=x.resolve(x.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),s(`\u6210\u529F\u91CD\u547D\u540D\u4E34\u65F6\u76EE\u5F55\u5230\u6700\u7EC8\u76EE\u5F55: ${a} -> ${n}`)}catch(i){let l=i instanceof Error?i.message:String(i);s(`\u91CD\u547D\u540D\u5931\u8D25\uFF0C\u5C1D\u8BD5\u590D\u5236\u65B9\u5F0F: ${l}`),d.cpSync(a,n,{recursive:!0}),d.rmSync(a,{recursive:!0,force:!0}),s(`\u4F7F\u7528\u590D\u5236\u65B9\u5F0F\u6210\u529F\u521B\u5EFA\u6700\u7EC8\u76EE\u5F55: ${n}`)}d.existsSync(c)&&(d.rmSync(c,{recursive:!0,force:!0}),s(`\u6E05\u7406\u5907\u4EFD\u76EE\u5F55: ${c}`));for(let i of e)i.outputDir&&d.existsSync(i.outputDir)&&(d.rmSync(i.outputDir,{recursive:!0,force:!0}),s(`\u6E05\u7406\u4E34\u65F6\u76EE\u5F55: ${i.outputDir}`));s("\u2705 \u9875\u9762\u6784\u5EFA\u7ED3\u679C\u5408\u5E76\u5B8C\u6210")}async function Oe(e,t){let r=t?console.log.bind(console,"[merge]"):()=>{},s=x.resolve(process.cwd(),"dist"),n=x.resolve(s,"assets");d.existsSync(n)||d.mkdirSync(n,{recursive:!0});let a=[];for(let c of e){if(!c.success)continue;let i=x.resolve(s,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 l=d.readdirSync(i,{withFileTypes:!0});for(let g of l){let u=x.resolve(i,g.name);if(g.isFile())if(g.name.endsWith(".html")){let o=x.resolve(s,g.name);d.copyFileSync(u,o),a.push(g.name),r(`\u590D\u5236HTML: ${g.name} -> dist/${g.name}`)}else{let o=x.resolve(s,g.name);d.copyFileSync(u,o),r(`\u590D\u5236\u6587\u4EF6: ${g.name} -> dist/${g.name}`)}else if(g.isDirectory()&&g.name==="assets"){let o=u,p=d.readdirSync(o,{withFileTypes:!0});for(let f of p){let m=x.resolve(o,f.name),$=x.resolve(n,f.name);if(f.isFile())if(d.existsSync($)){let h=d.readFileSync(m),v=d.readFileSync($);if(h.equals(v))r(`\u8DF3\u8FC7\u91CD\u590D\u8D44\u6E90: ${f.name}`);else{let b=x.extname(f.name),C=`${x.basename(f.name,b)}-${c.strategy}${b}`,L=x.resolve(n,C);d.copyFileSync(m,L),r(`\u590D\u5236\u8D44\u6E90(\u91CD\u547D\u540D): ${f.name} -> assets/${C}`)}}else d.copyFileSync(m,$),r(`\u590D\u5236\u8D44\u6E90: ${f.name} -> assets/${f.name}`);else if(f.isDirectory()){let h=x.resolve(n,f.name);d.existsSync(h)||d.mkdirSync(h,{recursive:!0}),d.cpSync(m,h,{recursive:!0}),r(`\u590D\u5236\u8D44\u6E90\u76EE\u5F55: ${f.name} -> assets/${f.name}`)}}}else if(g.isDirectory()){let o=x.resolve(s,g.name);d.cpSync(u,o,{recursive:!0}),r(`\u590D\u5236\u76EE\u5F55: ${g.name} -> dist/${g.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 Ze(e,t,r){let s=r?console.log.bind(console,"[merge]"):()=>{};await Oe(e,r);let n=x.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(()=>(_e(),Te));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 ge(e){let t=e?console.log.bind(console,"[cleanup]"):()=>{};t("\u6E05\u7406\u4E34\u65F6HTML\u6587\u4EF6...");let r=te.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let s of r){let n=x.resolve(process.cwd(),s);try{d.unlinkSync(n),t(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6: ${s}`)}catch(a){t(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${s}`,a)}}r.length===0?t("\u6CA1\u6709\u627E\u5230\u4E34\u65F6\u6587\u4EF6"):t(`\u2705 \u6E05\u7406\u4E86 ${r.length} \u4E2A\u4E34\u65F6\u6587\u4EF6`)}async function et(e,t,r){let s=r?console.log.bind(console,"[cleanup]"):()=>{};s("\u6E05\u7406\u4E34\u65F6\u6587\u4EF6...");let n=t.merge||"all",a=te.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let c of a){let i=x.resolve(process.cwd(),c);try{d.unlinkSync(i),s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}`)}catch(l){s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}`,l)}}for(let c of e){let i=x.resolve(process.cwd(),"dist",c);if(d.existsSync(i)){let l=te.sync("*.mp.temp.html",{cwd:i});for(let g of l){let u=x.resolve(i,g);try{d.unlinkSync(u),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${c}/${g}`)}catch(o){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${c}/${g}`,o)}}}}if(n==="all"){let c=x.resolve(process.cwd(),"dist");for(let i of e){let l=x.resolve(c,i);if(d.existsSync(l))try{d.rmSync(l,{recursive:!0,force:!0}),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55: ${i}`)}catch(g){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u5931\u8D25: ${i}`,g)}}}else s(`\u4FDD\u7559\u7B56\u7565\u76EE\u5F55 (merge\u6A21\u5F0F: ${n})`);s("\u2705 \u6E05\u7406\u5B8C\u6210")}async function De(){let{viteBuildArgs:e,debug:t,cwd:r,strategies:s}=ze(),n=t?console.log.bind(console,"[main]"):()=>{};if(r){let a=x.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 qe(),c=a.merge||"all";n("\u52A0\u8F7D\u7684\u914D\u7F6E:",a),n(`mergeMode: ${c}`),n("\u{1F9F9} \u6E05\u7406\u8F93\u51FA\u76EE\u5F55...");let{cleanViteOutputDirectory:i}=await Promise.resolve().then(()=>(N(),K));i(e),c==="page"?await tt(a,e,t):await st(a,e,t,s)}catch(a){console.error("\u274C \u6784\u5EFA\u5931\u8D25:",a instanceof Error?a.message:a),process.exit(1)}}async function tt(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(()=>(N(),K)),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(", ")}`),s("\u{1F528} \u5F00\u59CB\u5E76\u884C\u6784\u5EFA\u9875\u9762...");let c=a.map(o=>Qe(o.name,t,r)),i=await Promise.all(c),l=i.filter(o=>o.success).length,g=i.length-l;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:`),
|
|
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
|
|
142
|
-
\u53EF\u7528\u7B56\u7565: ${c.join(", ")}`);i=s
|
|
143
|
-
\u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${
|
|
144
|
-
\u274C \u5931\u8D25\u7684\u7B56\u7565:`),
|
|
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: ${
|
|
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()}),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()}),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';
|