@playcraft/build 0.0.8 → 0.0.11
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.md +122 -6
- package/dist/analyzers/build-analyzer.d.ts +98 -0
- package/dist/analyzers/build-analyzer.js +1160 -0
- package/dist/analyzers/enhanced-report-template.d.ts +13 -0
- package/dist/analyzers/enhanced-report-template.js +957 -0
- package/dist/analyzers/index.d.ts +6 -0
- package/dist/analyzers/index.js +9 -0
- package/dist/analyzers/optimization-analyzer.d.ts +88 -0
- package/dist/analyzers/optimization-analyzer.js +278 -0
- package/dist/analyzers/playable-analyzer.d.ts +91 -0
- package/dist/analyzers/playable-analyzer.js +976 -0
- package/dist/analyzers/report-template.d.ts +50 -0
- package/dist/analyzers/report-template.js +591 -0
- package/dist/analyzers/scene-asset-collector.js +8 -0
- package/dist/base-builder.d.ts +9 -0
- package/dist/base-builder.js +149 -1
- package/dist/build-state-manager.d.ts +110 -0
- package/dist/build-state-manager.js +169 -0
- package/dist/generators/config-generator.d.ts +2 -0
- package/dist/generators/config-generator.js +179 -10
- package/dist/index.d.ts +8 -0
- package/dist/index.js +6 -0
- package/dist/loaders/playcanvas-loader.d.ts +7 -0
- package/dist/loaders/playcanvas-loader.js +17 -0
- package/dist/state/build-state-manager.d.ts +174 -0
- package/dist/state/build-state-manager.js +235 -0
- package/dist/state/index.d.ts +4 -0
- package/dist/state/index.js +2 -0
- package/dist/state/state-to-report-converter.d.ts +141 -0
- package/dist/state/state-to-report-converter.js +177 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +11 -0
- package/dist/vite/config-builder.js +8 -1
- package/dist/vite/plugin-build-state.d.ts +11 -0
- package/dist/vite/plugin-build-state.js +145 -0
- package/dist/vite/plugin-source-builder.js +1 -0
- package/package.json +12 -12
- package/dist/templates/__loading__.js +0 -100
- package/dist/templates/__modules__.js +0 -47
- package/dist/templates/__settings__.template.js +0 -20
- package/dist/templates/__start__.js +0 -332
- package/dist/templates/index.html +0 -18
- package/dist/templates/logo.png +0 -0
- package/dist/templates/manifest.json +0 -1
- package/dist/templates/patches/cannon.min.js +0 -28
- package/dist/templates/patches/lz4.js +0 -10
- package/dist/templates/patches/one-page-http-get.js +0 -20
- package/dist/templates/patches/one-page-inline-game-scripts.js +0 -52
- package/dist/templates/patches/one-page-mraid-resize-canvas.js +0 -46
- package/dist/templates/patches/p2.min.js +0 -27
- package/dist/templates/patches/playcraft-no-xhr.js +0 -76
- package/dist/templates/playcanvas-stable.min.js +0 -16363
- package/dist/templates/styles.css +0 -43
package/README.md
CHANGED
|
@@ -1,13 +1,129 @@
|
|
|
1
1
|
# @playcraft/build
|
|
2
2
|
|
|
3
|
-
PlayCraft
|
|
3
|
+
PlayCraft 构建系统核心包,提供 Playable Ads 的构建、打包和优化功能。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 功能特性
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
7
|
+
### 🎯 核心功能
|
|
8
|
+
|
|
9
|
+
- **多平台支持**:支持 10+ 主流广告平台(Facebook、Snapchat、ironSource 等)
|
|
10
|
+
- **场景过滤**:智能分析场景依赖,只打包选中场景使用的资源
|
|
11
|
+
- **资源优化**:自动精简资源元数据,显著减少 config.json 体积
|
|
12
|
+
- **两阶段构建**:基础构建 + 渠道适配,灵活高效
|
|
13
|
+
|
|
14
|
+
### 📦 config.json 优化
|
|
15
|
+
|
|
16
|
+
`config.json` 是 PlayCanvas 项目的核心配置文件,包含所有资源的元数据。在大型项目中,这个文件可能达到 2MB 甚至更大,严重影响 Playable Ads 的加载性能。
|
|
17
|
+
|
|
18
|
+
#### 优化策略
|
|
19
|
+
|
|
20
|
+
**1. 资源元数据精简(默认启用)**
|
|
21
|
+
|
|
22
|
+
自动删除运行时不需要的字段,包括:
|
|
23
|
+
- `tags` - 编辑器标签
|
|
24
|
+
- `i18n` - 国际化数据
|
|
25
|
+
- `meta` - 编辑器元数据
|
|
26
|
+
- `thumbnails` - 缩略图
|
|
27
|
+
- `revision` - 版本号
|
|
28
|
+
- `created_at` / `updated_at` - 时间戳
|
|
29
|
+
- `user` / `branch_id` - 用户和分支信息
|
|
30
|
+
|
|
31
|
+
**预期效果**:减少 30-50% 的 config.json 体积
|
|
32
|
+
|
|
33
|
+
**2. 场景依赖分析**
|
|
34
|
+
|
|
35
|
+
结合场景过滤功能,只包含选中场景实际使用的资源。
|
|
36
|
+
|
|
37
|
+
**预期效果**:减少 40-70% 的资源数量
|
|
38
|
+
|
|
39
|
+
**3. 组合优化**
|
|
40
|
+
|
|
41
|
+
同时启用元数据精简和场景过滤,可以实现最佳优化效果。
|
|
42
|
+
|
|
43
|
+
**预期效果**:总体减少 60-80% 的 config.json 体积
|
|
44
|
+
|
|
45
|
+
#### 使用方式
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { generateConfig } from '@playcraft/build';
|
|
49
|
+
|
|
50
|
+
// 默认启用元数据精简
|
|
51
|
+
const config = await generateConfig(projectConfig, {
|
|
52
|
+
selectedScenes: ['MainScene'], // 场景过滤
|
|
53
|
+
projectDir: './project',
|
|
54
|
+
stripMetadata: true, // 元数据精简(默认 true)
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// 禁用元数据精简(保留完整元数据)
|
|
58
|
+
const configFull = await generateConfig(projectConfig, {
|
|
59
|
+
stripMetadata: false,
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
#### 优化效果示例
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
🗜️ 元数据精简统计:
|
|
67
|
+
- 原始大小: 2048.5 KB
|
|
68
|
+
- 精简后: 1024.3 KB
|
|
69
|
+
- 节省: 1024.2 KB (50.0%)
|
|
70
|
+
|
|
71
|
+
📊 资源过滤统计:
|
|
72
|
+
- 总资源数: 450
|
|
73
|
+
- 场景依赖: 180
|
|
74
|
+
- 将节省: 270 个资源 (60.0%)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### 运行时兼容性
|
|
78
|
+
|
|
79
|
+
精简后的 config.json 完全兼容 PlayCanvas 引擎,所有运行时需要的字段都会保留:
|
|
80
|
+
|
|
81
|
+
- ✅ 资源 URL 和文件信息
|
|
82
|
+
- ✅ 纹理过滤和寻址模式
|
|
83
|
+
- ✅ 材质配置
|
|
84
|
+
- ✅ 模型映射信息
|
|
85
|
+
- ✅ 脚本加载配置
|
|
86
|
+
- ✅ 动画和音频时长
|
|
87
|
+
- ✅ 字体和精灵配置
|
|
88
|
+
|
|
89
|
+
#### 高级优化方案
|
|
90
|
+
|
|
91
|
+
如果需要进一步优化,可以考虑:
|
|
92
|
+
|
|
93
|
+
**方案二:数据压缩**
|
|
94
|
+
- 使用 lz4/gzip 压缩 config.json
|
|
95
|
+
- 运行时解压
|
|
96
|
+
- 预期减少 60-70% 体积
|
|
97
|
+
|
|
98
|
+
**方案三:按需加载**
|
|
99
|
+
- 只在 config.json 中保留资源引用
|
|
100
|
+
- 详细元数据按需加载
|
|
101
|
+
- 预期减少 70-80% 体积
|
|
102
|
+
|
|
103
|
+
## API 文档
|
|
104
|
+
|
|
105
|
+
### generateConfig(projectConfig, options?)
|
|
106
|
+
|
|
107
|
+
生成 PlayCanvas 构建产物格式的 config.json。
|
|
108
|
+
|
|
109
|
+
**参数**:
|
|
110
|
+
- `projectConfig`: PlayCanvasProject | PlayCraftProject - 项目配置
|
|
111
|
+
- `options`: GenerateConfigOptions - 可选配置
|
|
112
|
+
- `selectedScenes?: string[]` - 选中的场景 ID 或名称列表
|
|
113
|
+
- `projectDir?: string` - 项目目录(用于加载完整场景文件)
|
|
114
|
+
- `stripMetadata?: boolean` - 是否精简资源元数据(默认 true)
|
|
115
|
+
|
|
116
|
+
**返回值**:Promise<any> - config.json 对象
|
|
117
|
+
|
|
118
|
+
## 相关文档
|
|
119
|
+
|
|
120
|
+
- [构建架构设计](../../docs/cli/build-architecture.md)
|
|
121
|
+
- [平台规格对照表](../../docs/cli/各渠道Playable规格对照表.md)
|
|
122
|
+
- [优化对照](../../docs/cli/playable-ads-optimization.md)
|
|
123
|
+
|
|
124
|
+
## License
|
|
125
|
+
|
|
126
|
+
MIT
|
|
11
127
|
|
|
12
128
|
## 支持的平台
|
|
13
129
|
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export interface FileAnalysis {
|
|
2
|
+
path: string;
|
|
3
|
+
relativePath: string;
|
|
4
|
+
size: number;
|
|
5
|
+
sizeFormatted: string;
|
|
6
|
+
dataUrlSize: number;
|
|
7
|
+
dataUrlSizeFormatted: string;
|
|
8
|
+
type: string;
|
|
9
|
+
category: string;
|
|
10
|
+
}
|
|
11
|
+
export interface BuildAnalysisReport {
|
|
12
|
+
totalFiles: number;
|
|
13
|
+
totalSize: number;
|
|
14
|
+
totalSizeFormatted: string;
|
|
15
|
+
estimatedHtmlSize: number;
|
|
16
|
+
estimatedHtmlSizeFormatted: string;
|
|
17
|
+
files: FileAnalysis[];
|
|
18
|
+
byCategory: Record<string, {
|
|
19
|
+
count: number;
|
|
20
|
+
size: number;
|
|
21
|
+
sizeFormatted: string;
|
|
22
|
+
dataUrlSize: number;
|
|
23
|
+
dataUrlSizeFormatted: string;
|
|
24
|
+
}>;
|
|
25
|
+
byType: Record<string, {
|
|
26
|
+
count: number;
|
|
27
|
+
size: number;
|
|
28
|
+
sizeFormatted: string;
|
|
29
|
+
}>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 构建分析器 - 分析构建产物并生成详细报告
|
|
33
|
+
*/
|
|
34
|
+
export declare class BuildAnalyzer {
|
|
35
|
+
private buildDir;
|
|
36
|
+
private outputDir;
|
|
37
|
+
constructor(buildDir: string, outputDir: string);
|
|
38
|
+
/**
|
|
39
|
+
* 分析构建产物
|
|
40
|
+
*/
|
|
41
|
+
analyze(): Promise<BuildAnalysisReport>;
|
|
42
|
+
/**
|
|
43
|
+
* 从 build-state.json 分析
|
|
44
|
+
*/
|
|
45
|
+
private analyzeFromState;
|
|
46
|
+
/**
|
|
47
|
+
* 从文件系统分析(回退方案)
|
|
48
|
+
*/
|
|
49
|
+
private analyzeFromFileSystem;
|
|
50
|
+
/**
|
|
51
|
+
* 估算 data URL 大小
|
|
52
|
+
*/
|
|
53
|
+
private estimateDataUrlSize;
|
|
54
|
+
/**
|
|
55
|
+
* 映射资产类型到文件类型
|
|
56
|
+
*/
|
|
57
|
+
private mapAssetTypeToFileType;
|
|
58
|
+
/**
|
|
59
|
+
* 映射资产类型到分类
|
|
60
|
+
*/
|
|
61
|
+
private mapAssetTypeToCategory;
|
|
62
|
+
/**
|
|
63
|
+
* 生成 HTML 报告
|
|
64
|
+
*/
|
|
65
|
+
generateHTMLReport(report: BuildAnalysisReport): Promise<string>;
|
|
66
|
+
/**
|
|
67
|
+
* 扫描目录获取所有文件
|
|
68
|
+
*/
|
|
69
|
+
private scanDirectory;
|
|
70
|
+
/**
|
|
71
|
+
* 分析单个文件
|
|
72
|
+
*/
|
|
73
|
+
private analyzeFile;
|
|
74
|
+
/**
|
|
75
|
+
* 获取文件类型
|
|
76
|
+
*/
|
|
77
|
+
private getFileType;
|
|
78
|
+
/**
|
|
79
|
+
* 获取文件分类
|
|
80
|
+
*/
|
|
81
|
+
private getFileCategory;
|
|
82
|
+
/**
|
|
83
|
+
* 获取 data URL 前缀
|
|
84
|
+
*/
|
|
85
|
+
private getDataUrlPrefix;
|
|
86
|
+
/**
|
|
87
|
+
* 格式化文件大小
|
|
88
|
+
*/
|
|
89
|
+
private formatSize;
|
|
90
|
+
/**
|
|
91
|
+
* 生成树状图数据结构
|
|
92
|
+
*/
|
|
93
|
+
private generateTreemapData;
|
|
94
|
+
/**
|
|
95
|
+
* 生成 HTML 报告内容
|
|
96
|
+
*/
|
|
97
|
+
private generateReportHTML;
|
|
98
|
+
}
|