@fchc8/vite-plugin-multi-page 1.9.6 → 1.10.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 +114 -13
- package/README.md +105 -4
- package/dist/cli.js +18 -15
- package/dist/index.d.mts +3 -5
- package/dist/index.d.ts +3 -5
- package/dist/index.js +9 -9
- 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
|
@@ -203,15 +203,60 @@ Control how build outputs are organized using the `merge` option:
|
|
|
203
203
|
```typescript
|
|
204
204
|
export default defineConfig({
|
|
205
205
|
// ... other configurations
|
|
206
|
-
merge: 'all' | '
|
|
206
|
+
merge: 'all' | 'page',
|
|
207
207
|
});
|
|
208
208
|
```
|
|
209
209
|
|
|
210
|
+
#### Available Modes
|
|
211
|
+
|
|
210
212
|
- **`all`** (default): All HTML files in root directory, assets merged into `/dist/assets/`
|
|
211
|
-
- **`strategy`**: Group by strategy, e.g., `/dist/mobile/page1.html`, `/dist/desktop/page1.html`
|
|
212
|
-
- **`page`**: Group by page, e.g., `/dist/homePage/index.html`, `/dist/aboutPage/index.html`
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
```
|
|
215
|
+
dist/
|
|
216
|
+
├── home.html
|
|
217
|
+
├── about.html
|
|
218
|
+
├── mobile.html
|
|
219
|
+
└── assets/
|
|
220
|
+
├── home-xxx.js
|
|
221
|
+
├── about-xxx.js
|
|
222
|
+
└── shared-resource.svg
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
- **`page`**: Each page is independently packaged with its own complete set of resource copies
|
|
226
|
+
```
|
|
227
|
+
dist/
|
|
228
|
+
├── home/
|
|
229
|
+
│ ├── index.html
|
|
230
|
+
│ ├── assets/
|
|
231
|
+
│ │ ├── home-xxx.js
|
|
232
|
+
│ │ └── button-loading.svg
|
|
233
|
+
│ └── images/
|
|
234
|
+
├── about/
|
|
235
|
+
│ ├── index.html
|
|
236
|
+
│ ├── assets/
|
|
237
|
+
│ │ ├── about-xxx.js
|
|
238
|
+
│ │ └── button-loading.svg
|
|
239
|
+
│ └── images/
|
|
240
|
+
└── mobile/
|
|
241
|
+
├── index.html
|
|
242
|
+
├── assets/
|
|
243
|
+
│ ├── mobile-xxx.js
|
|
244
|
+
│ └── button-loading.svg
|
|
245
|
+
└── images/
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Advantages of Page Mode
|
|
249
|
+
|
|
250
|
+
- ✅ **Fully Independent**: Each page directory contains all required resources, can be deployed independently
|
|
251
|
+
- ✅ **Avoid Conflicts**: Completely resolves shared resource attribution issues
|
|
252
|
+
- ✅ **Clean Naming**: Resource files use clean file names without page prefixes
|
|
253
|
+
- ✅ **Deployment Friendly**: Supports CDN distribution, micro-frontend architectures
|
|
254
|
+
|
|
255
|
+
> **Note**:
|
|
256
|
+
>
|
|
257
|
+
> - Page mode creates resource copies for each page, which may increase overall build output size
|
|
258
|
+
> - Suitable for scenarios requiring independent deployment or strict resource isolation
|
|
259
|
+
> - Static assets from the `public/` directory are automatically copied to each page directory
|
|
215
260
|
|
|
216
261
|
### Page Strategy Assignment
|
|
217
262
|
|
|
@@ -258,9 +303,64 @@ npm run dev
|
|
|
258
303
|
npm run dev -- --strategy mobile
|
|
259
304
|
```
|
|
260
305
|
|
|
306
|
+
## Usage Examples
|
|
307
|
+
|
|
308
|
+
### Page Mode for Independent Deployment
|
|
309
|
+
|
|
310
|
+
Configure Page mode where each page gets complete independent resources:
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
// multipage.config.ts
|
|
314
|
+
export default defineConfig({
|
|
315
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
316
|
+
template: 'index.html',
|
|
317
|
+
merge: 'page', // Enable Page mode
|
|
318
|
+
strategies: {
|
|
319
|
+
default: {
|
|
320
|
+
build: {
|
|
321
|
+
sourcemap: false,
|
|
322
|
+
minify: 'esbuild',
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
mobile: {
|
|
326
|
+
build: {
|
|
327
|
+
target: ['es2015'],
|
|
328
|
+
minify: 'terser',
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
pageConfigs: context => {
|
|
333
|
+
if (context.relativePath.includes('/mobile/')) {
|
|
334
|
+
return { strategy: 'mobile' };
|
|
335
|
+
}
|
|
336
|
+
return { strategy: 'default' };
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Build result: Each page has independent resource files, avoiding shared resource missing issues.
|
|
342
|
+
|
|
343
|
+
### Shared Resource Handling
|
|
344
|
+
|
|
345
|
+
In Page mode, shared resources (such as icons, style files) are copied to each page directory:
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
// src/pages/about/main.ts
|
|
349
|
+
import buttonIcon from '../button-loading.svg'; // Shared resource
|
|
350
|
+
|
|
351
|
+
// src/pages/mobile/main.ts
|
|
352
|
+
import buttonIcon from '../button-loading.svg'; // Same shared resource
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
After building, both pages will have their own resource copies:
|
|
356
|
+
|
|
357
|
+
- `dist/about/assets/button-loading-xxx.svg`
|
|
358
|
+
- `dist/mobile/assets/button-loading-xxx.svg`
|
|
359
|
+
|
|
261
360
|
## Environment Variables
|
|
262
361
|
|
|
263
362
|
- `VITE_BUILD_STRATEGY`: Specify a single strategy build
|
|
363
|
+
- `VITE_MULTI_PAGE_BUILD_SINGLE_PAGE`: Specify single page build (used internally by Page mode)
|
|
264
364
|
- `IS_MOBILE`: Mobile identifier (configured in define)
|
|
265
365
|
- `API_BASE`: API base address (configured in define)
|
|
266
366
|
|
|
@@ -286,15 +386,16 @@ export default config;
|
|
|
286
386
|
|
|
287
387
|
### Configuration Options
|
|
288
388
|
|
|
289
|
-
| Option | Type | Default Value | Description
|
|
290
|
-
| ------------- | -------------------------- | -------------------------- |
|
|
291
|
-
| `entry` | `string` | `'src/pages/**/*.{ts,js}'` | Page entry matching rules
|
|
292
|
-
| `template` | `string` | `'index.html'` | HTML Template File
|
|
293
|
-
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` |
|
|
294
|
-
| `exclude` | `string[]` | `[]` |
|
|
295
|
-
| `debug` | `boolean` | `false` |
|
|
296
|
-
| `
|
|
297
|
-
| `
|
|
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 |
|
|
298
399
|
|
|
299
400
|
### Utility Functions
|
|
300
401
|
|
package/README.md
CHANGED
|
@@ -203,15 +203,60 @@ strategies: {
|
|
|
203
203
|
```typescript
|
|
204
204
|
export default defineConfig({
|
|
205
205
|
// ... 其他配置
|
|
206
|
-
merge: 'all' | '
|
|
206
|
+
merge: 'all' | 'page',
|
|
207
207
|
});
|
|
208
208
|
```
|
|
209
209
|
|
|
210
|
+
#### 可用模式
|
|
211
|
+
|
|
210
212
|
- **`all`** (默认): 所有HTML文件放在根目录,资源合并到 `/dist/assets/`
|
|
211
|
-
- **`strategy`**: 按策略分组,如 `/dist/mobile/page1.html`、`/dist/desktop/page1.html`
|
|
212
|
-
- **`page`**: 按页面分组,如 `/dist/homePage/index.html`、`/dist/aboutPage/index.html`
|
|
213
213
|
|
|
214
|
-
|
|
214
|
+
```
|
|
215
|
+
dist/
|
|
216
|
+
├── home.html
|
|
217
|
+
├── about.html
|
|
218
|
+
├── mobile.html
|
|
219
|
+
└── assets/
|
|
220
|
+
├── home-xxx.js
|
|
221
|
+
├── about-xxx.js
|
|
222
|
+
└── shared-resource.svg
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
- **`page`**: 每个页面独立打包,各自拥有完整的资源副本
|
|
226
|
+
```
|
|
227
|
+
dist/
|
|
228
|
+
├── home/
|
|
229
|
+
│ ├── index.html
|
|
230
|
+
│ ├── assets/
|
|
231
|
+
│ │ ├── home-xxx.js
|
|
232
|
+
│ │ └── button-loading.svg
|
|
233
|
+
│ └── images/
|
|
234
|
+
├── about/
|
|
235
|
+
│ ├── index.html
|
|
236
|
+
│ ├── assets/
|
|
237
|
+
│ │ ├── about-xxx.js
|
|
238
|
+
│ │ └── button-loading.svg
|
|
239
|
+
│ └── images/
|
|
240
|
+
└── mobile/
|
|
241
|
+
├── index.html
|
|
242
|
+
├── assets/
|
|
243
|
+
│ ├── mobile-xxx.js
|
|
244
|
+
│ └── button-loading.svg
|
|
245
|
+
└── images/
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
#### Page模式的优势
|
|
249
|
+
|
|
250
|
+
- ✅ **完全独立**: 每个页面目录包含所有必需资源,可独立部署
|
|
251
|
+
- ✅ **避免冲突**: 彻底解决了共享资源的归属问题
|
|
252
|
+
- ✅ **简洁命名**: 资源文件使用干净的文件名,无页面前缀
|
|
253
|
+
- ✅ **部署友好**: 支持CDN分发、微前端等架构模式
|
|
254
|
+
|
|
255
|
+
> **注意**:
|
|
256
|
+
>
|
|
257
|
+
> - Page模式会为每个页面创建资源副本,可能增加总体构建产物大小
|
|
258
|
+
> - 适合需要独立部署或有严格资源隔离需求的场景
|
|
259
|
+
> - `public/` 目录中的静态资源会自动复制到每个页面目录中
|
|
215
260
|
|
|
216
261
|
### 页面策略分配
|
|
217
262
|
|
|
@@ -258,9 +303,64 @@ npm run dev
|
|
|
258
303
|
npm run dev -- --strategy mobile
|
|
259
304
|
```
|
|
260
305
|
|
|
306
|
+
## 使用示例
|
|
307
|
+
|
|
308
|
+
### Page模式独立部署
|
|
309
|
+
|
|
310
|
+
配置Page模式,每个页面获得完整的独立资源:
|
|
311
|
+
|
|
312
|
+
```typescript
|
|
313
|
+
// multipage.config.ts
|
|
314
|
+
export default defineConfig({
|
|
315
|
+
entry: 'src/pages/**/*.{ts,js}',
|
|
316
|
+
template: 'index.html',
|
|
317
|
+
merge: 'page', // 启用Page模式
|
|
318
|
+
strategies: {
|
|
319
|
+
default: {
|
|
320
|
+
build: {
|
|
321
|
+
sourcemap: false,
|
|
322
|
+
minify: 'esbuild',
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
mobile: {
|
|
326
|
+
build: {
|
|
327
|
+
target: ['es2015'],
|
|
328
|
+
minify: 'terser',
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
},
|
|
332
|
+
pageConfigs: context => {
|
|
333
|
+
if (context.relativePath.includes('/mobile/')) {
|
|
334
|
+
return { strategy: 'mobile' };
|
|
335
|
+
}
|
|
336
|
+
return { strategy: 'default' };
|
|
337
|
+
},
|
|
338
|
+
});
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
构建结果:每个页面都有独立的资源文件,避免共享资源缺失问题。
|
|
342
|
+
|
|
343
|
+
### 共享资源处理
|
|
344
|
+
|
|
345
|
+
在Page模式下,共享资源(如图标、样式文件)会被复制到每个页面目录:
|
|
346
|
+
|
|
347
|
+
```typescript
|
|
348
|
+
// src/pages/about/main.ts
|
|
349
|
+
import buttonIcon from '../button-loading.svg'; // 共享资源
|
|
350
|
+
|
|
351
|
+
// src/pages/mobile/main.ts
|
|
352
|
+
import buttonIcon from '../button-loading.svg'; // 相同的共享资源
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
构建后两个页面都会有自己的资源副本:
|
|
356
|
+
|
|
357
|
+
- `dist/about/assets/button-loading-xxx.svg`
|
|
358
|
+
- `dist/mobile/assets/button-loading-xxx.svg`
|
|
359
|
+
|
|
261
360
|
## 环境变量
|
|
262
361
|
|
|
263
362
|
- `VITE_BUILD_STRATEGY`: 指定单个策略构建
|
|
363
|
+
- `VITE_MULTI_PAGE_BUILD_SINGLE_PAGE`: 指定单个页面构建(Page模式内部使用)
|
|
264
364
|
- `IS_MOBILE`: 移动端标识 (在 define 中配置)
|
|
265
365
|
- `API_BASE`: API 基础地址 (在 define 中配置)
|
|
266
366
|
|
|
@@ -293,6 +393,7 @@ export default config;
|
|
|
293
393
|
| `placeholder` | `string` | `'{{ENTRY_FILE}}'` | 模板占位符 |
|
|
294
394
|
| `exclude` | `string[]` | `[]` | 排除的文件模式 |
|
|
295
395
|
| `debug` | `boolean` | `false` | 启用调试日志 |
|
|
396
|
+
| `merge` | `'all' \| 'page'` | `'all'` | 构建产物合并策略 |
|
|
296
397
|
| `strategies` | `Record<string, Strategy>` | `{}` | 构建策略配置 |
|
|
297
398
|
| `pageConfigs` | `Function \| Object` | `{}` | 页面配置 |
|
|
298
399
|
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var Me=Object.create;var z=Object.defineProperty;var je=Object.getOwnPropertyDescriptor;var Re=Object.getOwnPropertyNames;var Ie=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var _=(e,t)=>()=>(e&&(t=e(e=0)),t);var G=(e,t)=>{for(var r in t)z(e,r,{get:t[r],enumerable:!0})},pe=(e,t,r,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Re(t))!Le.call(e,n)&&n!==r&&z(e,n,{get:()=>t[n],enumerable:!(s=je(t,n))||s.enumerable});return e};var E=(e,t,r)=>(r=e!=null?Me(Ie(e)):{},pe(t||!e||!e.__esModule?z(r,"default",{value:e,enumerable:!0}):r,e)),Ae=e=>pe(z({},"__esModule",{value:!0}),e);var P=_(()=>{"use strict"});function U(e,t,r,s){let n=[],a=new Map,c=t.replace(/\/\*.*$/,"");(!c||c===t)&&(c=j.dirname(t.split("*")[0]));let i=[];for(let l of e){if(r.includes(l))continue;let g=l.replace(/\\/g,"/"),u=c.replace(/\\/g,"/"),p=j.posix.relative(u,g).split("/");if(p.length===1){let f=p[0],m=j.posix.basename(f,j.posix.extname(f));i.push({name:m,file:l,priority:1})}else if(p.length>=2){let f=j.posix.basename(g,j.posix.extname(g)),m=p[0];f==="main"&&i.push({name:m,file:l,priority:2})}}for(let l of i){let g=a.get(l.name);g?l.priority>g.priority&&a.set(l.name,{file:l.file,priority:l.priority}):a.set(l.name,{file:l.file,priority:l.priority})}for(let[l,{file:g}]of a.entries())n.push({name:l,file:g});return n}var j,ne=_(()=>{"use strict";P();j=E(require("path"))});function R(e,t,r){if(!e)return null;if(typeof e=="function"){let s=e(t);return s}for(let[s,n]of Object.entries(e)){if(s===t.pageName)return r(`\u7CBE\u786E\u5339\u914D\u9875\u9762 ${t.pageName}:`,n),n;if(n.match&&(Array.isArray(n.match)?n.match:[n.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: ${n.match}):`,n),{...n,match:void 0};if(q(s,t.pageName))return r(`Glob\u5339\u914D\u9875\u9762 ${t.pageName} (\u6A21\u5F0F: ${s}):`,n),n}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 re=_(()=>{"use strict";P()});function ue(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function W(e){return(...t)=>{e&&console.log("[vite-plugin-multi-page]",...t)}}var oe=_(()=>{"use strict";P()});var K={};G(K,{cleanViteOutputDirectory:()=>ie,discoverPages:()=>Ne,generateBuildConfig:()=>k,getAvailableStrategies:()=>ae,getViteOutputDirectory:()=>A});function k(e){var o;let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[],template:s="index.html",placeholder:n="<!--VITE_MULTI_PAGE_ENTRY-->",strategies:a={},pageConfigs:c={},forceBuildStrategy:i,forceBuildPage:l}=e,g=W(!0),u={};try{let p=Q.glob.sync(t,{cwd:process.cwd()}),f=U(p,t,r,g);if(f.length===0)return g("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6"),{};let m=new Map,$=new Map;for(let v of f){let b={pageName:v.name,filePath:v.file,relativePath:F.relative(process.cwd(),v.file)},w=R(c,b,g),C=(w==null?void 0:w.strategy)||"default";m.set(v.name,C),$.has(C)||$.set(C,[]),(o=$.get(C))==null||o.push(v.name)}if(g(`\u{1F4C4} \u53D1\u73B0 ${f.length} \u4E2A\u9875\u9762: ${f.map(v=>v.name).join(", ")}`),l){if(!f.find(L=>L.name===l))return g(`\u8B66\u544A: \u672A\u627E\u5230\u9875\u9762 "${l}"`),{};g(`\u5F3A\u5236\u6784\u5EFA\u9875\u9762: ${l}`);let b=m.get(l)||"default",w=a[b]||{},C=J(`single-${l}`,[l],f,w,c,s,n,g);return u[`single-${l}`]=C,u}if(i){let v=$.get(i)||[];if(v.length===0)return g(`\u8B66\u544A: \u7B56\u7565 "${i}" \u4E0B\u6CA1\u6709\u9875\u9762`),{};g(`\u5F3A\u5236\u6784\u5EFA\u7B56\u7565: ${i}, \u9875\u9762: ${v.join(", ")}`);let b=J(i,v,f,a[i],c,s,n,g);return u[i]=b,u}for(let[v,b]of $){if(b.length===0)continue;let w=a[v]||{},C=J(v,b,f,w,c,s,n,g);u[v]=C}if(Object.keys(u).length===0){g("\u8B66\u544A: \u672A\u751F\u6210\u4EFB\u4F55\u6784\u5EFA\u914D\u7F6E\uFF0C\u521B\u5EFA\u9ED8\u8BA4\u914D\u7F6E");let v=f.map(w=>w.name),b=J("default",v,f,{},c,s,n,g);u.default=b}let h=Object.keys(u);return g(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${h.join(", ")}`),u}catch(p){throw g("\u751F\u6210\u6784\u5EFA\u914D\u7F6E\u5931\u8D25:",p),p}}function J(e,t,r,s,n,a,c,i){let l={},g=[],u={};for(let f of t){let m=r.find(se=>se.name===f);if(!m)continue;let $={pageName:f,filePath:m.file,relativePath:F.relative(process.cwd(),m.file),strategy:e},h=R(n,$,i);h!=null&&h.define&&Object.assign(u,h.define);let v=a,b=`${f}.html`;O.existsSync(F.resolve(process.cwd(),b))?v=b:h!=null&&h.template&&(v=h.template);let w=F.resolve(process.cwd(),v);if(!O.existsSync(w)){i(`\u8B66\u544A: \u6A21\u677F\u6587\u4EF6\u4E0D\u5B58\u5728: ${v}`);continue}let C=O.readFileSync(w,"utf-8");if(C.includes(c)){let se=`./${m.file}`;C=C.replace(new RegExp(c.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),se)}let L=F.resolve(process.cwd(),`.temp.mp.${f}.html`);O.writeFileSync(L,C),g.push(L),l[f]=L}let o={build:{rollupOptions:{input:l,output:{entryFileNames:"assets/[name]-[hash].js",chunkFileNames:"assets/[name]-[hash].js",assetFileNames:"assets/[name]-[hash][extname]"}},emptyOutDir:!1},define:{}},p=o;return s&&(p=(0,me.mergeConfig)(o,s)),Object.keys(u).length>0&&(p.define={...p.define,...u}),p.build||(p.build={}),p.build.rollupOptions||(p.build.rollupOptions={}),p.build.rollupOptions.input=l,p.build.emptyOutDir=!1,i(`\u7B56\u7565 "${e}" - ${t.length} \u4E2A\u9875\u9762`),p}function A(e=[]){let t=e.findIndex(s=>s==="--outDir");if(t!==-1&&t+1<e.length){let s=e[t+1];return F.resolve(process.cwd(),s)}let r=e.find(s=>s.startsWith("--outDir="));if(r){let s=r.split("=")[1];return F.resolve(process.cwd(),s)}return F.resolve(process.cwd(),"dist")}function ie(e=[]){let t=A(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(s){r(`\u26A0\uFE0F \u6E05\u7406\u8F93\u51FA\u76EE\u5F55\u5931\u8D25: ${t}`,s)}}function Ne(e){let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[]}=e,s=W(!0);try{let n=Q.glob.sync(t,{cwd:process.cwd()});return U(n,t,r,s)}catch(n){throw s("\u53D1\u73B0\u9875\u9762\u5931\u8D25:",n),n}}function ae(e){let{entry:t="src/pages/*/main.{ts,js}",exclude:r=[],pageConfigs:s={}}=e,n=W(!1),a=new Set,c=Q.glob.sync(t,{cwd:process.cwd()}),i=U(c,t,r,n);if(i.length===0)throw new Error(`\u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6: ${t}`);try{for(let l of i){let g={pageName:l.name,filePath:l.file,relativePath:F.relative(process.cwd(),l.file)},u=R(s,g,n),o=(u==null?void 0:u.strategy)||"default";a.add(o)}return Array.from(a).sort()}catch(l){return n("\u83B7\u53D6\u53EF\u7528\u7B56\u7565\u5931\u8D25:",l),["default"]}}var me,Q,F,O,N=_(()=>{"use strict";P();me=require("vite"),Q=require("glob"),F=E(require("path")),O=E(require("fs"));ne();re();oe()});var he={};G(he,{hasCustomConfig:()=>X,loadUserConfig:()=>Z});function X(){for(let e of ye){let t=I.resolve(process.cwd(),e);if(B.existsSync(t))return!0}return!1}async function Z(e){let t=await ke();if(t){let r=t(e);return r||{}}return null}async function Ue(e){if(e.endsWith(".ts"))try{let t=await B.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: ${I.basename(e)}`)}let s=await r.transform(t,{loader:"ts",format:"cjs",target:"node16",sourcemap:!1}),n=new H.Module(e);return n.filename=e,n.paths=H.Module._nodeModulePaths(I.dirname(e)),n._compile(s.code,e),n.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 s=(await B.promises.readFile(e,"utf-8")).replace(/export\s+default\s+/,"module.exports = ").replace(/import\s+.*?from\s+['"][^'"]*['"];?\s*/g,"").replace(/:\s*[^=,})\]]+/g,""),n=new H.Module(e);return n.filename=e,n.paths=H.Module._nodeModulePaths(I.dirname(e)),n._compile(s,e),n.exports}if(e.endsWith(".js")||e.endsWith(".mjs"))return import(`${(0,de.pathToFileURL)(e).href}?t=${Date.now()}`);throw new Error(`\u4E0D\u652F\u6301\u7684\u914D\u7F6E\u6587\u4EF6\u7C7B\u578B: ${e}`)}async function ke(){let e=process.cwd();for(let t of ye){let r=I.resolve(e,t);if(B.existsSync(r))try{let s=await Ue(r),n=s.default||s;if(typeof n=="function")return n;console.warn(`\u914D\u7F6E\u6587\u4EF6 ${t} \u5FC5\u987B\u9ED8\u8BA4\u5BFC\u51FA\u4E00\u4E2A\u51FD\u6570`)}catch(s){t.endsWith(".ts")?(console.error(`\u52A0\u8F7DTypeScript\u914D\u7F6E\u6587\u4EF6 ${t} \u5931\u8D25:`,s),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:`,s)}}return null}var B,I,de,H,ye,ce=_(()=>{"use strict";P();B=E(require("fs")),I=E(require("path")),de=require("url"),H=require("module"),ye=["multipage.config.js","multipage.config.mjs","multipage.config.ts"]});var xe={};G(xe,{DEFAULT_CONFIG:()=>T,isEmptyConfig:()=>Be,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,__forceBuildStrategy:e.__forceBuildStrategy}:{...T}}function Be(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,s=e.pageConfigs&&(typeof e.pageConfigs=="function"||Object.keys(e.pageConfigs).length>0);return!t&&!r&&!s}var T,ee=_(()=>{"use strict";P();T={entry:"src/pages/**/*.{ts,js}",exclude:[],template:"index.html",placeholder:"{{ENTRY_FILE}}",debug:!1,merge:"all",strategies:{default:{}},pageConfigs:{}}});function Ve(e,t,r){try{let s=ve.glob.sync(t.entry,{cwd:process.cwd()}),n=U(s,t.entry,t.exclude,r);if(n.length===0){r("\u8B66\u544A: \u672A\u627E\u5230\u5339\u914D\u7684\u5165\u53E3\u6587\u4EF6");return}let a=t.devStrategy||e.config.__cliStrategy||e.config.strategy;a&&(r(`\u5F00\u53D1\u670D\u52A1\u5668\u4F7F\u7528\u6307\u5B9A\u7684\u7B56\u7565: ${a}`),n=n.filter(c=>{let i={pageName:c.name,filePath:c.file,relativePath:D.relative(process.cwd(),c.file),strategy:void 0,isMatched:!1},l=R(t.pageConfigs,i,r),g=(l==null?void 0:l.strategy)||"default";return a==="default"?g==="default":g===a}),r(`\u7B56\u7565 "${a}" \u4E0B\u53EF\u7528\u7684\u9875\u9762: ${n.map(c=>c.name).join(", ")||"\u65E0"}`)),r("\u5F00\u53D1\u670D\u52A1\u5668\u5E94\u7528\u7684\u5165\u53E3\u6587\u4EF6:",n),e.middlewares.use(async(c,i,l)=>{try{let u=(c.url||"").split("?")[0];if(u==="/"){let f=We(n,t,r);i.statusCode=200,i.setHeader("Content-Type","text/html"),i.end(f);return}if(u.match(/\.(js|css|png|jpg|jpeg|gif|svg|ico|woff|woff2|ttf|eot|map)$/)&&!u.endsWith(".html")||u.startsWith("/@")||u.includes("__vite")||u.startsWith("/node_modules"))return l();let o="";if(u.endsWith(".html"))o=D.basename(u,".html");else if(u.startsWith("/")){let f=u.substring(1);if(n.find(m=>m.name===f))o=f;else{let m=f.split("/");if(m.length>1){let $=m[0];n.find(h=>h.name===$)&&(o=$,r(`History \u8DEF\u7531\u5339\u914D: ${u} -> ${$}`))}}}if(!o)return l();let p=n.find(f=>f.name===o);return p?Ge(i,p,t,r):l()}catch(g){r(`\u5F00\u53D1\u670D\u52A1\u5668\u5904\u7406\u8BF7\u6C42\u5931\u8D25: ${g}`),l(g)}}),r("\u5F00\u53D1\u670D\u52A1\u5668\u914D\u7F6E\u5B8C\u6210")}catch(s){throw r(`\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668\u5931\u8D25: ${s}`),s}}function Ge(e,t,r,s){var u;let n={pageName:t.name,filePath:t.file,relativePath:D.relative(process.cwd(),t.file),strategy:void 0,isMatched:!1},a=R(r.pageConfigs,n,s);if(a!=null&&a.strategy)n.strategy=a.strategy;else if((u=r.appliedStrategies)!=null&&u.has(t.name)){let o=r.appliedStrategies.get(t.name);o&&(n.strategy=o)}let c="",i=D.resolve(process.cwd(),`${t.name}.html`);if(Y.existsSync(i)?c=i:a!=null&&a.template?c=D.resolve(process.cwd(),a.template):c=D.resolve(process.cwd(),r.template),!Y.existsSync(c)){e.statusCode=404,e.end("Template not found");return}let l=Y.readFileSync(c,"utf-8");if(l.includes(r.placeholder)){let o=l;if(l=l.split(r.placeholder).join(`/${t.file}`),l===o){let p=ue(r.placeholder),f=new RegExp(p,"g");l=o.replace(f,`/${t.file}`),l===o&&(l=o.replace(/\{\{ENTRY_FILE\}\}/g,`/${t.file}`))}}if(a!=null&&a.define){let o=Object.entries(a.define).map(([p,f])=>{let m=typeof f=="string"?`"${f}"`:JSON.stringify(f);return`window.${p} = ${m};`}).join(`
|
|
6
|
+
`);o&&(l=l.replace(/<\/head>/i,`<script type="text/javascript">
|
|
7
|
+
${o}
|
|
8
8
|
</script>
|
|
9
|
-
</head>`))}
|
|
9
|
+
</head>`))}e.statusCode=200,e.setHeader("Content-Type","text/html"),e.end(l)}function We(e,t,r){try{let s=e.map(n=>{var g;let a={pageName:n.name,filePath:n.file,relativePath:D.relative(process.cwd(),n.file),strategy:void 0,isMatched:!1},c=R(t.pageConfigs,a,r),i="default";if(c!=null&&c.strategy)i=c.strategy;else if((g=t.appliedStrategies)!=null&&g.has(n.name)){let u=t.appliedStrategies.get(n.name);u&&(i=u)}let l=i!=="default"?`<span class="badge">${i}</span>`:"";return`
|
|
10
10
|
<div class="page-item">
|
|
11
11
|
<a href="${n.name}.html" class="page-link">
|
|
12
|
-
${n.name}${
|
|
12
|
+
${n.name}${l}
|
|
13
13
|
</a>
|
|
14
14
|
<div class="page-path">${n.file}</div>
|
|
15
15
|
</div>`}).join("");return`
|
|
@@ -84,14 +84,14 @@ ${a}
|
|
|
84
84
|
<body>
|
|
85
85
|
<h1>\u591A\u9875\u9762\u5E94\u7528\u7D22\u5F15</h1>
|
|
86
86
|
<div class="stats">
|
|
87
|
-
\u627E\u5230 ${
|
|
87
|
+
\u627E\u5230 ${e.length} \u4E2A\u9875\u9762
|
|
88
88
|
</div>
|
|
89
89
|
<div class="page-list">
|
|
90
90
|
${s}
|
|
91
91
|
</div>
|
|
92
92
|
</body>
|
|
93
93
|
</html>
|
|
94
|
-
`}catch(s){return
|
|
94
|
+
`}catch(s){return r(`\u751F\u6210\u7D22\u5F15\u9875\u5931\u8D25: ${s}`),`
|
|
95
95
|
<!DOCTYPE html>
|
|
96
96
|
<html>
|
|
97
97
|
<head>
|
|
@@ -102,7 +102,7 @@ ${a}
|
|
|
102
102
|
<p>${s}</p>
|
|
103
103
|
</body>
|
|
104
104
|
</html>
|
|
105
|
-
`}}var
|
|
105
|
+
`}}var D,Y,ve,$e,Se=_(()=>{"use strict";P();D=E(require("path")),Y=E(require("fs")),ve=require("glob");ne();oe();re();$e=Ve});function be(e){return typeof e=="function"?e:()=>e}function Ce(e){return e}var Pe=_(()=>{"use strict";P()});var Te={};G(Te,{cleanViteOutputDirectory:()=>ie,default:()=>Ye,defineConfig:()=>be,defineConfigTransform:()=>Ce,generateBuildConfig:()=>k,getAvailableStrategies:()=>ae,getViteOutputDirectory:()=>A,mergeWithDefaults:()=>V,reorganizeAssetsInCLI:()=>He,viteMultiPage:()=>Fe});function Ee(e,t,r,s){let n=S.resolve(e,"assets");if(!y.existsSync(n)){s("assets\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u91CD\u7EC4");return}let a=y.readdirSync(e).filter(o=>o.endsWith(".html")).map(o=>S.resolve(e,o));if(a.length===0){if(s("\u672A\u627E\u5230HTML\u6587\u4EF6\uFF0C\u4F46\u4ECD\u9700\u6E05\u7406assets\u76EE\u5F55"),(t==="strategy"||t==="page")&&y.existsSync(n))try{y.rmSync(n,{recursive:!0,force:!0}),s("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(o){s("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",o)}return}let c=new Map,i=new Map;a.forEach(o=>{var w;let p=S.basename(o,".html");p.startsWith(".temp.mp.")&&(p=p.replace(".temp.mp.",""));let f=y.readFileSync(o,"utf-8"),m=[],$=/(?:src|href)="\/assets\/([^"]+)"/g,h;for(;(h=$.exec(f))!==null;){let C=h[1];m.push(C),i.has(C)||i.set(C,[]),(w=i.get(C))==null||w.push(p)}let v="";t==="page"&&(v=p);let b=S.resolve(e,v);c.set(p,{assets:m,targetDir:b}),s(`\u9875\u9762 ${p} \u4F9D\u8D56\u8D44\u6E90:`,m)}),s("\u7B2C\u4E00\u9636\u6BB5\u8865\u5145\uFF1A\u5206\u6790public\u76EE\u5F55\u8D44\u6E90");let l=new Set,g=S.resolve(process.cwd(),"public");if(y.existsSync(g)){let o=we.sync("**/*",{cwd:g,nodir:!0});for(let p of o)l.add(p),s(`\u53D1\u73B0public\u8D44\u6E90: ${p}`)}i.forEach((o,p)=>{o.length>1?s(`\u5171\u4EAB\u8D44\u6E90 ${p} \u88AB\u9875\u9762\u4F7F\u7528:`,o):s(`\u72EC\u5360\u8D44\u6E90 ${p} \u4EC5\u88AB\u9875\u9762 ${o[0]} \u4F7F\u7528`)}),c.forEach(({assets:o,targetDir:p},f)=>{let m=S.resolve(p,"assets");y.existsSync(m)||y.mkdirSync(m,{recursive:!0}),o.forEach($=>{let h=S.resolve(n,$),v=S.resolve(m,$);if(y.existsSync(h)){y.copyFileSync(h,v);let w=(i.get($)||[]).length>1?"\u5171\u4EAB\u8D44\u6E90":"\u72EC\u5360\u8D44\u6E90";s(`\u590D\u5236${w}\u5230 ${f}: assets/${$} -> ${S.relative(e,v)}`)}else s(`\u8B66\u544A: \u8D44\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728: ${h}`)}),y.existsSync(n)&&y.readdirSync(n).forEach(h=>{if(!o.includes(h)){let v=S.resolve(n,h),b=S.resolve(m,h);y.existsSync(v)&&(y.copyFileSync(v,b),s(`\u590D\u5236\u5176\u4ED6\u8D44\u6E90\u6587\u4EF6\u5230 ${f}: assets/${h} -> ${S.relative(e,b)}`))}})}),s("\u7B2C\u4E09\u9636\u6BB5\u8865\u5145\uFF1A\u5904\u7406public\u76EE\u5F55\u8D44\u6E90");let u=new Set;c.forEach(({targetDir:o})=>{u.add(o)});for(let o of u)for(let p of l){let f=S.resolve(e,p),m=S.resolve(o,p);if(y.existsSync(f)){let $=S.dirname(m);y.existsSync($)||y.mkdirSync($,{recursive:!0}),y.copyFileSync(f,m),s(`\u590D\u5236public\u8D44\u6E90: ${p} -> ${S.relative(e,m)}`)}}if(c.forEach(({targetDir:o},p)=>{let f=S.resolve(e,`${p}.html`),m=p;if(y.existsSync(f)||(f=S.resolve(e,`.temp.mp.${p}.html`),y.existsSync(f)&&(m=p)),y.existsSync(f)){let $=y.readFileSync(f,"utf-8");$=$.replace(/(?:src|href)="\/assets\//g,b=>b.replace("/assets/","./assets/"));let h;t==="strategy"?h=S.resolve(o,`${m}.html`):t==="page"?h=S.resolve(o,"index.html"):h=f,y.writeFileSync(h,$),h!==f&&y.unlinkSync(f);let v=S.relative(e,h);s(`\u6309${t}\u5206\u7EC4\u79FB\u52A8HTML\u6587\u4EF6: ${m}.html -> ${v}`)}else s(`\u8B66\u544A: \u672A\u627E\u5230HTML\u6587\u4EF6: ${p}.html \u6216 .temp.mp.${p}.html`)}),y.existsSync(n))if(t==="strategy"||t==="page")try{y.rmSync(n,{recursive:!0,force:!0}),s("\u5F3A\u5236\u6E05\u7406\u6574\u4E2A\u6839\u76EE\u5F55assets\u76EE\u5F55 (strategy/page\u6A21\u5F0F)")}catch(o){s("\u6E05\u7406\u6839\u76EE\u5F55assets\u5931\u8D25:",o)}else{i.forEach((p,f)=>{let m=S.resolve(n,f);y.existsSync(m)&&(y.unlinkSync(m),s(`\u6E05\u7406\u539F\u59CB\u8D44\u6E90\u6587\u4EF6: assets/${f}`))});let o=y.readdirSync(n);o.length===0?(y.rmdirSync(n),s("\u6E05\u7406\u7A7A\u7684assets\u76EE\u5F55")):s("assets\u76EE\u5F55\u4E2D\u8FD8\u6709\u672A\u5904\u7406\u7684\u6587\u4EF6:",o)}(t==="strategy"||t==="page")&&l.size>0&&(s("\u7B2C\u4E94\u9636\u6BB5\u8865\u5145\uFF1A\u6E05\u7406\u6839\u76EE\u5F55\u7684public\u8D44\u6E90"),l.forEach(o=>{let p=S.resolve(e,o);if(y.existsSync(p))try{y.unlinkSync(p),s(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90: ${o}`)}catch(f){s(`\u5220\u9664\u6839\u76EE\u5F55public\u8D44\u6E90\u5931\u8D25: ${o}`,f)}}),l.forEach(o=>{let p=S.resolve(e,o),f=S.dirname(p);for(;f!==e&&f!==S.dirname(f);)try{if(y.existsSync(f)&&y.readdirSync(f).length===0)y.rmdirSync(f),s(`\u5220\u9664\u7A7A\u76EE\u5F55: ${S.relative(e,f)}`),f=S.dirname(f);else break}catch{break}}))}function Fe(e){let t,r=[],s=()=>{};return{name:"vite-multi-page",async configResolved(n){let a=null;X()&&(a=await Z({mode:n.command==="serve"?"development":"production",command:n.command,isCLI:!1}));let c=V(a);t=e?e(c,{mode:n.command==="serve"?"development":"production",command:n.command,isCLI:!1}):c,s=t.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{},s("Vite\u914D\u7F6E\u5DF2\u89E3\u6790, \u4F7F\u7528\u914D\u7F6E:",{strategies:Object.keys(t.strategies||{}),entry:t.entry})},async config(n,{command:a}){var c;if(a==="serve"){let i=process.argv,l=i.find(g=>g.startsWith("--strategy="));if(l){let g=l.split("=")[1];g&&(process.env.VITE_MULTI_PAGE_STRATEGY=g)}else{let g=i.findIndex(u=>u==="--strategy");if(g!==-1&&g+1<i.length){let u=i[g+1];process.env.VITE_MULTI_PAGE_STRATEGY=u}}process.env.VITE_MULTI_PAGE_STRATEGY||(process.env.VITE_MULTI_PAGE_STRATEGY="default")}if(a==="build"){if(!t){let o=null;X()&&(o=await Z({mode:"production",command:"build",isCLI:!1}));let p=V(o);t=e?e(p,{mode:"production",command:"build",isCLI:!1}):p,s=t.debug??!1?console.log.bind(console,"[vite-multi-page]"):()=>{}}s("\u914D\u7F6E\u6784\u5EFA\u6A21\u5F0F");let i=process.env.VITE_MULTI_PAGE_BUILD_SINGLE_PAGE;if(i){s(`\u5355\u9875\u9762\u6784\u5EFA\u6A21\u5F0F: ${i}`);let o=k({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}),p=Object.values(o);if(p.length>0){let f=p[0],m=(0,le.mergeConfig)(n,f);Object.assign(n,m),s(`\u5DF2\u5E94\u7528\u5355\u9875\u9762\u6784\u5EFA\u914D\u7F6E: ${i}`);return}else throw new Error(`\u672A\u627E\u5230\u9875\u9762: ${i}`)}let l=process.env.VITE_MULTI_PAGE_STRATEGY,g=k({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:l}),u=Object.keys(g)[0];if(u&&g[u]){s(`\u5E94\u7528\u6784\u5EFA\u7B56\u7565: ${u}`);let o=g[u],p=(0,le.mergeConfig)(n,o);Object.assign(n,p),s(`\u5DF2\u5E94\u7528\u7B56\u7565 "${u}" \u7684\u914D\u7F6E:`,{build:!!o.build,define:!!o.define,plugins:((c=o.plugins)==null?void 0:c.length)||0})}else throw s("\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(n){if(n.config.command==="serve"){s("\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668");let
|
|
120
|
+
});`)}},configureServer(n){if(n.config.command==="serve"){s("\u914D\u7F6E\u5F00\u53D1\u670D\u52A1\u5668");let a=process.env.VITE_MULTI_PAGE_STRATEGY||"default";s(`\u5F00\u53D1\u6A21\u5F0F\u7B56\u7565: ${a}`),$e(n,{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:a},s)}},writeBundle(n){if(!(t!=null&&t.merge)||t.merge==="all")return;let a=n.dir||"dist",c=t.merge;s(`\u5E94\u7528\u6784\u5EFA\u4EA7\u7269\u5408\u5E76\u6A21\u5F0F: ${c}`);try{Ee(a,c,t,s)}catch(i){throw s("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",i),i}},buildEnd(){r.length>0&&(s(`\u6E05\u7406 ${r.length} \u4E2A\u4E34\u65F6\u6587\u4EF6`),r.forEach(n=>{try{y.existsSync(n)&&(y.unlinkSync(n),s(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6: ${n}`))}catch(a){s(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${n}`,a)}}),r.length=0)}}}function He(e,t,r,s){return Ee(e,t,r,s)}var y,S,le,we,Ye,_e=_(()=>{"use strict";P();y=E(require("fs")),S=E(require("path")),le=require("vite");Se();N();ce();ee();we=E(require("glob"));Pe();N();ee();Ye=Fe});var nt={};G(nt,{buildAll:()=>De});module.exports=Ae(nt);P();var fe=require("child_process"),d=E(require("fs")),x=E(require("path")),te=E(require("glob"));N();function ze(){let e=process.argv.slice(2),t=[],r=!1,s,n;for(let a=0;a<e.length;a++){let c=e[a];c==="--debug"?r=!0:c==="--cwd"?s=e[++a]:c==="--strategy"?n=e[++a].split(",").map(l=>l.trim()):c==="--help"||c==="-h"?(console.log(`
|
|
121
121
|
\u4F7F\u7528\u65B9\u6CD5: vite-mp [\u9009\u9879]
|
|
122
122
|
|
|
123
123
|
\u9009\u9879:
|
|
@@ -135,8 +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)):l!=="build"&&e.push(l)}return{viteBuildArgs:e,debug:i,cwd:s,strategies:n}}async function Ye(){let{loadUserConfig:t,hasCustomConfig:e}=await Promise.resolve().then(()=>(ce(),ue)),{mergeWithDefaults:i}=await Promise.resolve().then(()=>(K(),de)),s=null;return e()?s=await t({mode:"production",command:"build",isCLI:!0}):console.log("\u2139\uFE0F \u672A\u627E\u5230\u914D\u7F6E\u6587\u4EF6\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E"),i(s)}function ze(t,e,i){return new Promise(s=>{var m;let n=i?console.log.bind(console,`[${t}]`):()=>{};n(`\u5F00\u59CB\u6784\u5EFA\u7B56\u7565: ${t}`);let c={...process.env,VITE_MULTI_PAGE_STRATEGY:t},l=["build",...e];n(`\u6267\u884C\u547D\u4EE4: npx vite ${l.join(" ")}`);let g=(0,Te.spawn)("npx",["vite",...l],{stdio:i?"inherit":"pipe",env:c,cwd:process.cwd()}),o="";i||(m=g.stderr)==null||m.on("data",d=>{o+=d.toString()}),g.on("close",d=>{let a=d===0,u=L(e);if(a){n(`\u2705 \u7B56\u7565 ${t} \u6784\u5EFA\u6210\u529F`);try{if(v.existsSync(u)){let r=v.readdirSync(u);for(let f of r)if(f.startsWith(".temp.mp.")&&f.endsWith(".html")){let x=C.resolve(u,f),y=`${f.replace(/^\.temp\.mp\./,"").replace(/\.html$/,"")}.html`,b=C.resolve(u,y);v.renameSync(x,b),n(`\u91CD\u547D\u540DHTML: ${f} -> ${y}`)}}}catch(r){n("\u91CD\u547D\u540DHTML\u6587\u4EF6\u5931\u8D25:",r)}}else n(`\u274C \u7B56\u7565 ${t} \u6784\u5EFA\u5931\u8D25 (\u9000\u51FA\u7801: ${d})`),!i&&o&&console.error(`\u7B56\u7565 ${t} \u9519\u8BEF\u8F93\u51FA:`,o);s({strategy:t,success:a,error:a?void 0:o||`\u6784\u5EFA\u5931\u8D25\uFF0C\u9000\u51FA\u7801: ${d}`,outputDir:u})}),g.on("error",d=>{n(`\u274C \u7B56\u7565 ${t} \u6784\u5EFA\u51FA\u9519:`,d.message);let a=L(e);s({strategy:t,success:!1,error:d.message,outputDir:a})})})}async function qe(t,e,i){let s=i?console.log.bind(console,"[merge]"):()=>{};s("\u5F00\u59CB\u5408\u5E76\u6784\u5EFA\u7ED3\u679C...");let n=e.merge||"all";s(`\u4F7F\u7528\u5408\u5E76\u6A21\u5F0F: ${n}`),n==="all"?await Oe(t,i):await Je(t,e,i)}async function Oe(t,e){let i=e?console.log.bind(console,"[merge]"):()=>{},s=C.resolve(process.cwd(),"dist"),n=C.resolve(s,"assets");v.existsSync(n)||v.mkdirSync(n,{recursive:!0});let c=[];for(let l of t){if(!l.success)continue;let g=C.resolve(s,l.strategy);if(!v.existsSync(g)){i(`\u8B66\u544A: \u7B56\u7565\u76EE\u5F55\u4E0D\u5B58\u5728: ${g}`);continue}i(`\u5904\u7406\u7B56\u7565: ${l.strategy}`);let o=v.readdirSync(g,{withFileTypes:!0});for(let m of o){let d=C.resolve(g,m.name);if(m.isFile())if(m.name.endsWith(".html")){let a=C.resolve(s,m.name);v.copyFileSync(d,a),c.push(m.name),i(`\u590D\u5236HTML: ${m.name} -> dist/${m.name}`)}else{let a=C.resolve(s,m.name);v.copyFileSync(d,a),i(`\u590D\u5236\u6587\u4EF6: ${m.name} -> dist/${m.name}`)}else if(m.isDirectory()&&m.name==="assets"){let a=d,u=v.readdirSync(a,{withFileTypes:!0});for(let r of u){let f=C.resolve(a,r.name),x=C.resolve(n,r.name);if(r.isFile())if(v.existsSync(x)){let p=v.readFileSync(f),y=v.readFileSync(x);if(p.equals(y))i(`\u8DF3\u8FC7\u91CD\u590D\u8D44\u6E90: ${r.name}`);else{let b=C.extname(r.name),P=`${C.basename(r.name,b)}-${l.strategy}${b}`,W=C.resolve(n,P);v.copyFileSync(f,W),i(`\u590D\u5236\u8D44\u6E90(\u91CD\u547D\u540D): ${r.name} -> assets/${P}`)}}else v.copyFileSync(f,x),i(`\u590D\u5236\u8D44\u6E90: ${r.name} -> assets/${r.name}`);else if(r.isDirectory()){let p=C.resolve(n,r.name);v.existsSync(p)||v.mkdirSync(p,{recursive:!0}),v.cpSync(f,p,{recursive:!0}),i(`\u590D\u5236\u8D44\u6E90\u76EE\u5F55: ${r.name} -> assets/${r.name}`)}}}else if(m.isDirectory()){let a=C.resolve(s,m.name);v.cpSync(d,a,{recursive:!0}),i(`\u590D\u5236\u76EE\u5F55: ${m.name} -> dist/${m.name}`)}}}i("\u2705 \u6784\u5EFA\u7ED3\u679C\u5408\u5E76\u5B8C\u6210"),i(`\u{1F4C1} \u751F\u6210\u9875\u9762: ${c.join(", ")}`),i("\u{1F4E6} \u8D44\u6E90\u76EE\u5F55: dist/assets/"),i(`\u{1F527} \u5904\u7406\u7B56\u7565: ${t.filter(l=>l.success).map(l=>l.strategy).join(", ")}`)}async function Je(t,e,i){let s=i?console.log.bind(console,"[merge]"):()=>{};await Oe(t,i);let n=C.resolve(process.cwd(),"dist"),c=e.merge;s(`\u5E94\u7528${c}\u6A21\u5F0F\u7684\u8D44\u6E90\u91CD\u7EC4...`);try{let{reorganizeAssetsInCLI:l}=await Promise.resolve().then(()=>(Ee(),Fe));await l(n,c,e,s),s(`\u2705 ${c}\u6A21\u5F0F\u8D44\u6E90\u91CD\u7EC4\u5B8C\u6210`)}catch(l){throw s("\u8D44\u6E90\u91CD\u7EC4\u5931\u8D25:",l),l}}async function Qe(t){let e=t?console.log.bind(console,"[cleanup]"):()=>{};e("\u6E05\u7406\u4E34\u65F6HTML\u6587\u4EF6...");let i=X.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let s of i){let n=C.resolve(process.cwd(),s);try{v.unlinkSync(n),e(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6: ${s}`)}catch(c){e(`\u5220\u9664\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${s}`,c)}}i.length===0?e("\u6CA1\u6709\u627E\u5230\u4E34\u65F6\u6587\u4EF6"):e(`\u2705 \u6E05\u7406\u4E86 ${i.length} \u4E2A\u4E34\u65F6\u6587\u4EF6`)}async function Ke(t,e,i){let s=i?console.log.bind(console,"[cleanup]"):()=>{};s("\u6E05\u7406\u4E34\u65F6\u6587\u4EF6...");let n=e.merge||"all",c=X.sync(".temp.mp.*.html",{cwd:process.cwd()});for(let l of c){let g=C.resolve(process.cwd(),l);try{v.unlinkSync(g),s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${l}`)}catch(o){s(`\u5220\u9664\u6839\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${l}`,o)}}for(let l of t){let g=C.resolve(process.cwd(),"dist",l);if(v.existsSync(g)){let o=X.sync("*.mp.temp.html",{cwd:g});for(let m of o){let d=C.resolve(g,m);try{v.unlinkSync(d),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6: ${l}/${m}`)}catch(a){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u4E34\u65F6\u6587\u4EF6\u5931\u8D25: ${l}/${m}`,a)}}}}if(n==="all"){let l=C.resolve(process.cwd(),"dist");for(let g of t){let o=C.resolve(l,g);if(v.existsSync(o))try{v.rmSync(o,{recursive:!0,force:!0}),s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55: ${g}`)}catch(m){s(`\u5220\u9664\u7B56\u7565\u76EE\u5F55\u5931\u8D25: ${g}`,m)}}}else s(`\u4FDD\u7559\u7B56\u7565\u76EE\u5F55 (merge\u6A21\u5F0F: ${n})`);s("\u2705 \u6E05\u7406\u5B8C\u6210")}async function Me(){let{viteBuildArgs:t,debug:e,cwd:i,strategies:s}=Ge(),n=e?console.log.bind(console,"[main]"):()=>{};if(i){let c=C.resolve(process.cwd(),i);v.existsSync(c)||(console.error(`\u274C \u6307\u5B9A\u7684\u76EE\u5F55\u4E0D\u5B58\u5728: ${c}`),process.exit(1)),process.chdir(c),n(`\u5207\u6362\u5DE5\u4F5C\u76EE\u5F55\u5230: ${c}`)}try{n("\u{1F680} \u5F00\u59CB\u591A\u7B56\u7565\u6784\u5EFA..."),n("\u{1F4CB} \u52A0\u8F7D\u914D\u7F6E...");let c=await Ye(),{getAvailableStrategies:l}=await Promise.resolve().then(()=>(A(),ae)),g=l({entry:c.entry||"src/pages/*/main.{ts,js}",exclude:c.exclude||[],template:c.template||"index.html",placeholder:c.placeholder||"{{ENTRY_FILE}}",pageConfigs:c.pageConfigs||{},strategies:c.strategies||{}});if(g.length===0)throw new Error("\u672A\u627E\u5230\u4EFB\u4F55\u6784\u5EFA\u7B56\u7565");let o;if(s&&s.length>0){let p=s.filter(y=>!g.includes(y));if(p.length>0)throw new Error(`\u6307\u5B9A\u7684\u7B56\u7565\u4E0D\u5B58\u5728: ${p.join(", ")}
|
|
139
|
-
\
|
|
140
|
-
\
|
|
141
|
-
\
|
|
142
|
-
\
|
|
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: ${l}`),console.log(`\u274C \u5931\u8D25: ${g}`),g>0&&(console.log(`
|
|
140
|
+
\u274C \u5931\u8D25\u7684\u9875\u9762:`),i.filter(o=>!o.success).forEach(o=>{console.log(` - ${o.pageName}: ${o.error}`)}),await ge(r),process.exit(1)),s("\u{1F4E6} \u5408\u5E76\u9875\u9762\u6784\u5EFA\u7ED3\u679C..."),await Xe(i,e,r),await ge(r);let u=i.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 st(e,t,r,s){let n=r?console.log.bind(console,"[strategy-mode]"):()=>{};n("\u{1F680} \u5F00\u59CB\u7B56\u7565\u6A21\u5F0F\u6784\u5EFA...");let{getAvailableStrategies:a}=await Promise.resolve().then(()=>(N(),K)),c=a({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(s&&s.length>0){let m=s.filter($=>!c.includes($));if(m.length>0)throw new Error(`\u6307\u5B9A\u7684\u7B56\u7565\u4E0D\u5B58\u5728: ${m.join(", ")}
|
|
142
|
+
\u53EF\u7528\u7B56\u7565: ${c.join(", ")}`);i=s,n(`\u4F7F\u7528\u6307\u5B9A\u7684\u7B56\u7565: ${i.join(", ")}`)}else i=c,n(`\u6784\u5EFA\u6240\u6709\u53EF\u7528\u7B56\u7565: ${i.join(", ")}`);n("\u{1F528} \u5F00\u59CB\u5E76\u884C\u6784\u5EFA...");let l=i.map(m=>Je(m,t,r)),g=await Promise.all(l),u=g.filter(m=>m.success).length,o=g.length-u;console.log(`
|
|
143
|
+
\u{1F4CA} \u6784\u5EFA\u7ED3\u679C\u7EDF\u8BA1:`),console.log(`\u2705 \u6210\u529F: ${u}`),console.log(`\u274C \u5931\u8D25: ${o}`),o>0&&(console.log(`
|
|
144
|
+
\u274C \u5931\u8D25\u7684\u7B56\u7565:`),g.filter(m=>!m.success).forEach(m=>{console.log(` - ${m.strategy}: ${m.error}`)}),await ge(r),process.exit(1)),n("\u{1F4E6} \u5408\u5E76\u6784\u5EFA\u7ED3\u679C..."),await Ke(g,e,r),await et(i,e,r);let p=g.filter(m=>m.success),f=d.readdirSync(x.resolve(process.cwd(),"dist")).filter(m=>m.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: ${f.join(", ")}`),console.log(`\u{1F4E6} \u6784\u5EFA\u7B56\u7565: ${p.map(m=>m.strategy).join(", ")}`)}require.main===module&&De().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
|
@@ -6,7 +6,7 @@ interface MultiPageOptions {
|
|
|
6
6
|
template?: string;
|
|
7
7
|
placeholder?: string;
|
|
8
8
|
debug?: boolean;
|
|
9
|
-
merge?: 'all' | '
|
|
9
|
+
merge?: 'all' | 'page';
|
|
10
10
|
strategies?: Record<string, ConfigStrategy>;
|
|
11
11
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
12
12
|
__forceBuildStrategy?: string;
|
|
@@ -17,10 +17,11 @@ interface BuildConfigOptions {
|
|
|
17
17
|
exclude: string[];
|
|
18
18
|
template: string;
|
|
19
19
|
placeholder: string;
|
|
20
|
-
merge?: 'all' | '
|
|
20
|
+
merge?: 'all' | 'page';
|
|
21
21
|
strategies?: Record<string, ConfigStrategy>;
|
|
22
22
|
pageConfigs?: Record<string, PageConfig> | PageConfigFunction;
|
|
23
23
|
forceBuildStrategy?: string;
|
|
24
|
+
forceBuildPage?: string;
|
|
24
25
|
}
|
|
25
26
|
interface ConfigStrategy extends Omit<UserConfig, 'plugins'> {
|
|
26
27
|
}
|
|
@@ -64,9 +65,6 @@ declare function getViteOutputDirectory(viteBuildArgs?: string[]): string;
|
|
|
64
65
|
* 清理Vite配置的输出目录
|
|
65
66
|
*/
|
|
66
67
|
declare function cleanViteOutputDirectory(viteBuildArgs?: string[]): void;
|
|
67
|
-
/**
|
|
68
|
-
* 获取所有可用的构建策略
|
|
69
|
-
*/
|
|
70
68
|
declare function getAvailableStrategies(options: BuildConfigOptions): string[];
|
|
71
69
|
|
|
72
70
|
/**
|