ttmg-pack 0.2.8-unity.1 → 0.2.9
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/CHANGELOG.md +8 -0
- package/dist/constants/index.d.ts +17 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +224 -138
- package/dist/index.js.map +1 -1
- package/dist/libs/buildPkgs/index.d.ts +1 -1
- package/dist/libs/clearPkgs/index.d.ts +1 -0
- package/dist/libs/index.d.ts +1 -0
- package/dist/utils/getCheckConfig.d.ts +2 -0
- package/dist/utils/getDirSizeSync.d.ts +10 -3
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/overrideConfig.d.ts +1 -1
- package/dist/utils/removeSystemUseless.d.ts +8 -1
- package/dist/utils/unity/getUnityBuildConfig.d.ts +2 -0
- package/dist/utils/unity/index.d.ts +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -284,6 +284,7 @@ remove useless log
|
|
|
284
284
|
调整 esbuild 构建目标为 es2015,避免部分语法不符合预期
|
|
285
285
|
|
|
286
286
|
## 0.1.8-beta.1
|
|
287
|
+
|
|
287
288
|
导出 unity 相关函数
|
|
288
289
|
|
|
289
290
|
## 0.1.9
|
|
@@ -307,6 +308,7 @@ fix: 修复 esbuild 构建编码问题
|
|
|
307
308
|
补充对 分包名称名称为中文类型字符的校验支持,避免打包失败
|
|
308
309
|
|
|
309
310
|
## 0.2.3
|
|
311
|
+
|
|
310
312
|
esbuild 构建目标调整为 es2020,避免部分语法不符合预期,和安卓 vmsdk 支持最低版本保持一致
|
|
311
313
|
|
|
312
314
|
## 0.2.4
|
|
@@ -326,3 +328,9 @@ esbuild 构建目标调整为 es2020,避免部分语法不符合预期,和
|
|
|
326
328
|
修复 open data context 代码丢失问题,彻底修复
|
|
327
329
|
调整 esbuild 构建目标为 esnext,避免部分语法不符合预期
|
|
328
330
|
|
|
331
|
+
## 0.2.8
|
|
332
|
+
|
|
333
|
+
支持 unity 游戏引擎,支持包体个性化校验 60MB
|
|
334
|
+
|
|
335
|
+
## 0.2.9
|
|
336
|
+
本地调试代码预检查校验适配 unity 包大小限制
|
|
@@ -34,3 +34,20 @@ export declare const PACKAGE_TYPE: {
|
|
|
34
34
|
export declare const GAME_ENGINES: {
|
|
35
35
|
UNITY: string;
|
|
36
36
|
};
|
|
37
|
+
export declare const TTMG_TEMP_DIR = "__TTMG_TEMP__";
|
|
38
|
+
export declare const USELESS_DIRS: string[];
|
|
39
|
+
export declare const USELESS_FILES: string[];
|
|
40
|
+
export declare const GAME_PKG_SIZE_LIMIT: {
|
|
41
|
+
common: {
|
|
42
|
+
project: number;
|
|
43
|
+
main: number;
|
|
44
|
+
sub: any;
|
|
45
|
+
independent: number;
|
|
46
|
+
};
|
|
47
|
+
unity: {
|
|
48
|
+
project: number;
|
|
49
|
+
main: any;
|
|
50
|
+
sub: any;
|
|
51
|
+
independent: any;
|
|
52
|
+
};
|
|
53
|
+
};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ==========================================
|
|
3
3
|
* @Description: ttmg pack
|
|
4
|
-
* @Version: 0.2.
|
|
4
|
+
* @Version: 0.2.9
|
|
5
5
|
* @Author: zhanghongyang.mocha
|
|
6
|
-
* @Date:
|
|
6
|
+
* @Date: 2026-01-19 15:29:08
|
|
7
7
|
* ==========================================
|
|
8
8
|
*/
|
|
9
9
|
'use strict';
|
|
@@ -146,31 +146,92 @@ const PACKAGE_TYPE = {
|
|
|
146
146
|
IndependentPackage: 'independent_package',
|
|
147
147
|
MainPackage: 'main_package',
|
|
148
148
|
};
|
|
149
|
+
const TTMG_TEMP_DIR = '__TTMG_TEMP__';
|
|
150
|
+
const USELESS_DIRS = ['node_modules', '__MACOSX', TTMG_TEMP_DIR];
|
|
151
|
+
const USELESS_FILES = ['.DS_Store', 'Thumbs.db'];
|
|
152
|
+
const GAME_PKG_SIZE_LIMIT = {
|
|
153
|
+
unity: {
|
|
154
|
+
project: 60 * 1024 * 1024,
|
|
155
|
+
main: null,
|
|
156
|
+
independent: null,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
149
159
|
|
|
150
|
-
|
|
151
|
-
|
|
160
|
+
/**
|
|
161
|
+
* 递归统计目录下所有文件的大小,支持过滤文件夹和文件
|
|
162
|
+
*/
|
|
163
|
+
function getDirSizeSync(options) {
|
|
164
|
+
const { rootDir, entryDir, filterDirs = USELESS_DIRS, filterFiles = USELESS_FILES, filterPatterns = [], filterRegex = [], } = options;
|
|
152
165
|
let totalSize = 0;
|
|
153
|
-
|
|
166
|
+
// 检查目录是否存在
|
|
167
|
+
if (!fs.existsSync(entryDir)) {
|
|
154
168
|
return 0;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
+
}
|
|
170
|
+
// 将通配符模式转换为正则表达式
|
|
171
|
+
const patternRegexes = filterPatterns.map(pattern => {
|
|
172
|
+
const escaped = pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
173
|
+
const regexStr = escaped.replace(/\\\*/g, '.*').replace(/\\\?/g, '.');
|
|
174
|
+
return new RegExp(`^${regexStr}$`);
|
|
175
|
+
});
|
|
176
|
+
// 合并所有正则表达式
|
|
177
|
+
const allRegexes = [...patternRegexes, ...filterRegex];
|
|
178
|
+
// 检查是否应该忽略当前条目
|
|
179
|
+
const shouldIgnore = (name, isDirectory) => {
|
|
180
|
+
// 1. 检查精确匹配
|
|
181
|
+
if (isDirectory && filterDirs.includes(name)) {
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
if (!isDirectory && filterFiles.includes(name)) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
// 2. 检查相对路径匹配(针对目录)
|
|
188
|
+
if (isDirectory) {
|
|
189
|
+
const relativePath = path
|
|
190
|
+
.relative(rootDir, path.join(entryDir, name))
|
|
191
|
+
.replace(/\\/g, '/');
|
|
192
|
+
if (filterDirs.includes(relativePath)) {
|
|
193
|
+
return true;
|
|
169
194
|
}
|
|
170
195
|
}
|
|
171
|
-
|
|
172
|
-
|
|
196
|
+
// 3. 检查正则表达式匹配
|
|
197
|
+
if (allRegexes.some(regex => regex.test(name))) {
|
|
198
|
+
return true;
|
|
173
199
|
}
|
|
200
|
+
return false;
|
|
201
|
+
};
|
|
202
|
+
try {
|
|
203
|
+
const entries = fs.readdirSync(entryDir, { withFileTypes: true });
|
|
204
|
+
for (const entry of entries) {
|
|
205
|
+
const fullPath = path.join(entryDir, entry.name);
|
|
206
|
+
try {
|
|
207
|
+
if (entry.isDirectory()) {
|
|
208
|
+
// 检查是否应该忽略此目录
|
|
209
|
+
if (!shouldIgnore(entry.name, true)) {
|
|
210
|
+
totalSize += getDirSizeSync({
|
|
211
|
+
rootDir,
|
|
212
|
+
entryDir: fullPath,
|
|
213
|
+
filterDirs,
|
|
214
|
+
filterFiles,
|
|
215
|
+
filterPatterns,
|
|
216
|
+
filterRegex,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (entry.isFile()) {
|
|
221
|
+
// 检查是否应该忽略此文件
|
|
222
|
+
if (!shouldIgnore(entry.name, false)) {
|
|
223
|
+
totalSize += fs.statSync(fullPath).size;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
// 跳过无法访问的文件/目录
|
|
229
|
+
console.warn(`无法访问: ${fullPath}`, err.message);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
console.warn(`无法读取目录: ${entryDir}`, err.message);
|
|
174
235
|
}
|
|
175
236
|
return totalSize;
|
|
176
237
|
}
|
|
@@ -216,52 +277,69 @@ function deleteNoJsFilesSync(dir) {
|
|
|
216
277
|
}
|
|
217
278
|
}
|
|
218
279
|
|
|
219
|
-
const uselessDirs = ['node_modules', '__MACOSX'];
|
|
220
280
|
const uselessFiles = ['.DS_Store', 'Thumbs.db'];
|
|
221
|
-
function removeSystemUseless(gameEntry) {
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
281
|
+
function removeSystemUseless(gameEntry, uselessDirs) {
|
|
282
|
+
const progress = {
|
|
283
|
+
total: 0,
|
|
284
|
+
processed: 0,
|
|
285
|
+
deletedDirs: 0,
|
|
286
|
+
deletedFiles: 0,
|
|
287
|
+
errors: 0,
|
|
288
|
+
};
|
|
289
|
+
// 1. 读取目录
|
|
290
|
+
let files;
|
|
291
|
+
try {
|
|
292
|
+
files = fs.readdirSync(gameEntry);
|
|
293
|
+
progress.total = files.length;
|
|
294
|
+
logger.info(`开始清理无用文件,共 ${progress.total} 个条目`);
|
|
295
|
+
}
|
|
296
|
+
catch (err) {
|
|
297
|
+
logger.warn(`无法访问目录: ${gameEntry}, ${err.message}`);
|
|
298
|
+
progress.errors++;
|
|
299
|
+
return progress;
|
|
300
|
+
}
|
|
301
|
+
// 2. 处理每个条目
|
|
302
|
+
files.forEach((file, index) => {
|
|
303
|
+
const filePath = path.join(gameEntry, file);
|
|
227
304
|
try {
|
|
228
|
-
|
|
305
|
+
const stat = fs.statSync(filePath);
|
|
306
|
+
if (stat.isDirectory() && uselessDirs.includes(file)) {
|
|
307
|
+
// 删除无用目录
|
|
308
|
+
logger.debug(`正在删除目录: ${filePath}`);
|
|
309
|
+
fs.rmSync(filePath, { recursive: true, force: true });
|
|
310
|
+
progress.deletedDirs++;
|
|
311
|
+
logger.info(`✅ 已删除无用目录: ${filePath}`);
|
|
312
|
+
}
|
|
313
|
+
else if (stat.isFile() && uselessFiles.includes(file)) {
|
|
314
|
+
// 删除无用文件
|
|
315
|
+
logger.debug(`正在删除文件: ${filePath}`);
|
|
316
|
+
fs.rmSync(filePath, { force: true });
|
|
317
|
+
progress.deletedFiles++;
|
|
318
|
+
logger.info(`✅ 已删除无用文件: ${filePath}`);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
logger.debug(`跳过: ${filePath} (非目标文件/目录)`);
|
|
322
|
+
}
|
|
229
323
|
}
|
|
230
324
|
catch (err) {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
return;
|
|
325
|
+
logger.warn(`❌ 无法处理: ${filePath}, ${err.message}`);
|
|
326
|
+
progress.errors++;
|
|
234
327
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
else if (stat.isFile()) {
|
|
251
|
-
if (uselessFiles.includes(file)) {
|
|
252
|
-
// 删除无用文件
|
|
253
|
-
fs.rmSync(filePath, { force: true });
|
|
254
|
-
logger.info(`已删除无用文件: ${filePath}`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
catch (err) {
|
|
259
|
-
// 某个文件/目录不可访问,跳过
|
|
260
|
-
logger.warn(`无法处理: ${filePath}, ${err.message}`);
|
|
261
|
-
}
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
removeUselessDirs(gameEntry);
|
|
328
|
+
// 更新进度
|
|
329
|
+
progress.processed = index + 1;
|
|
330
|
+
// 可选:每处理10个条目输出一次进度
|
|
331
|
+
if ((index + 1) % 10 === 0 || index + 1 === progress.total) {
|
|
332
|
+
const percentage = Math.round(((index + 1) / progress.total) * 100);
|
|
333
|
+
logger.info(`进度: ${index + 1}/${progress.total} (${percentage}%)`);
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
// 3. 输出总结
|
|
337
|
+
logger.info(`清理完成!`);
|
|
338
|
+
logger.info(`- 总条目: ${progress.total}`);
|
|
339
|
+
logger.info(`- 已删除目录: ${progress.deletedDirs}`);
|
|
340
|
+
logger.info(`- 已删除文件: ${progress.deletedFiles}`);
|
|
341
|
+
logger.info(`- 错误数: ${progress.errors}`);
|
|
342
|
+
return progress;
|
|
265
343
|
}
|
|
266
344
|
|
|
267
345
|
async function asyncPool$1(poolLimit, array, iteratorFn) {
|
|
@@ -315,7 +393,7 @@ function getMainPkgSize({ entryDir }) {
|
|
|
315
393
|
return getDirSizeSync({
|
|
316
394
|
rootDir: entryDir,
|
|
317
395
|
entryDir,
|
|
318
|
-
filterDirs: getSubpackagesRoots(entryDir),
|
|
396
|
+
filterDirs: [...getSubpackagesRoots(entryDir), ...USELESS_DIRS],
|
|
319
397
|
});
|
|
320
398
|
}
|
|
321
399
|
function getSubpackagesRoots(entryDir) {
|
|
@@ -339,7 +417,6 @@ function getProjectSize({ entryDir }) {
|
|
|
339
417
|
return getDirSizeSync({
|
|
340
418
|
rootDir: entryDir,
|
|
341
419
|
entryDir,
|
|
342
|
-
filterDirs: [],
|
|
343
420
|
});
|
|
344
421
|
}
|
|
345
422
|
|
|
@@ -362,58 +439,6 @@ function getGameEngine(gameEntry) {
|
|
|
362
439
|
}
|
|
363
440
|
}
|
|
364
441
|
|
|
365
|
-
function isUnityEngine(gameEntry) {
|
|
366
|
-
return getGameEngine(gameEntry) === 'unity';
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
function getWasmBrCodePath({ entryDir, }) {
|
|
370
|
-
if (!isUnityEngine(entryDir)) {
|
|
371
|
-
return '';
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
374
|
-
/**
|
|
375
|
-
* 检查项目下存在一个名为 wasmcode 的文件夹,且文件夹下存在一个文件后缀为 .webgl.wasm.code.unityweb.wasm.br 的文件。,如果满足条件,就展示 true,否则 返回 false
|
|
376
|
-
*/
|
|
377
|
-
const wasmCodeDir = path.join(entryDir, 'wasmcode');
|
|
378
|
-
if (!fs.existsSync(wasmCodeDir)) {
|
|
379
|
-
return '';
|
|
380
|
-
}
|
|
381
|
-
const wasmBrFiles = fs.readdirSync(wasmCodeDir).filter(file => file.endsWith('.webgl.wasm.code.unityweb.wasm.br'));
|
|
382
|
-
if (wasmBrFiles.length === 0) {
|
|
383
|
-
return '';
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
return path.relative(entryDir, path.join(wasmCodeDir, wasmBrFiles[0]));
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
function getWasmBrCodeMd5({ entryDir }) {
|
|
392
|
-
// originalWasmMd5
|
|
393
|
-
try {
|
|
394
|
-
const gameConfig = JSON.parse(fs.readFileSync(path.join(entryDir, 'game.json'), 'utf-8'));
|
|
395
|
-
return gameConfig.originalWasmMd5 || '';
|
|
396
|
-
}
|
|
397
|
-
catch (_a) {
|
|
398
|
-
return '';
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
// 面向高鹏编程 😢
|
|
403
|
-
/**
|
|
404
|
-
* 覆盖配置,根据游戏引擎类型,设置主包和独立子包的大小限制
|
|
405
|
-
* @param entryDir 游戏项目入口目录
|
|
406
|
-
* @param config 原始构建配置
|
|
407
|
-
* @returns 覆盖后的构建配置
|
|
408
|
-
*/
|
|
409
|
-
function overrideConfig(entryDir, config) {
|
|
410
|
-
var _a, _b;
|
|
411
|
-
const isUnity = isUnityEngine(entryDir);
|
|
412
|
-
return Object.assign(Object.assign({}, config), { build: Object.assign(Object.assign({}, config.build), { mainPkgSizeLimit: !isUnity ? (_a = config.build) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit : null, independentSubPkgSizeLimit: !isUnity
|
|
413
|
-
? (_b = config.build) === null || _b === void 0 ? void 0 : _b.independentSubPkgSizeLimit
|
|
414
|
-
: null }) });
|
|
415
|
-
}
|
|
416
|
-
|
|
417
442
|
let initializePromise = null;
|
|
418
443
|
/**
|
|
419
444
|
* 确保一个异步函数在整个应用生命周期内只被执行一次。
|
|
@@ -534,6 +559,64 @@ async function genOpenDataContext(entryPath) {
|
|
|
534
559
|
return jsCode;
|
|
535
560
|
}
|
|
536
561
|
|
|
562
|
+
function isUnityEngine(gameEntry) {
|
|
563
|
+
return getGameEngine(gameEntry) === 'unity';
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
function getWasmBrCodePath({ entryDir, }) {
|
|
567
|
+
if (!isUnityEngine(entryDir)) {
|
|
568
|
+
return '';
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
/**
|
|
572
|
+
* 检查项目下存在一个名为 wasmcode 的文件夹,且文件夹下存在一个文件后缀为 .webgl.wasm.code.unityweb.wasm.br 的文件。,如果满足条件,就展示 true,否则 返回 false
|
|
573
|
+
*/
|
|
574
|
+
const wasmCodeDir = path.join(entryDir, 'wasmcode');
|
|
575
|
+
if (!fs.existsSync(wasmCodeDir)) {
|
|
576
|
+
return '';
|
|
577
|
+
}
|
|
578
|
+
const wasmBrFiles = fs.readdirSync(wasmCodeDir).filter(file => file.endsWith('.webgl.wasm.code.unityweb.wasm.br'));
|
|
579
|
+
if (wasmBrFiles.length === 0) {
|
|
580
|
+
return '';
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
return path.relative(entryDir, path.join(wasmCodeDir, wasmBrFiles[0]));
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
function getWasmBrCodeMd5({ entryDir }) {
|
|
589
|
+
// originalWasmMd5
|
|
590
|
+
try {
|
|
591
|
+
const gameConfig = JSON.parse(fs.readFileSync(path.join(entryDir, 'game.json'), 'utf-8'));
|
|
592
|
+
return gameConfig.originalWasmMd5 || '';
|
|
593
|
+
}
|
|
594
|
+
catch (_a) {
|
|
595
|
+
return '';
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function getUnityBuildConfig() {
|
|
600
|
+
return {
|
|
601
|
+
pkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.project,
|
|
602
|
+
mainPkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.main,
|
|
603
|
+
independentSubPkgSizeLimit: GAME_PKG_SIZE_LIMIT.unity.independent,
|
|
604
|
+
};
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
function getCheckConfig(config) {
|
|
608
|
+
if (isUnityEngine(config.entry)) {
|
|
609
|
+
return getUnityBuildConfig();
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
return {
|
|
613
|
+
pkgSizeLimit: 30 * 1024 * 1024,
|
|
614
|
+
mainPkgSizeLimit: 4 * 1024 * 1024,
|
|
615
|
+
independentSubPkgSizeLimit: 4 * 1024 * 1024,
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
|
|
537
620
|
/**
|
|
538
621
|
* 将 packageConfig packages 中 分拆的包 配置迁移到 odr_packages 中
|
|
539
622
|
*/
|
|
@@ -830,7 +913,8 @@ function checkGameJson(entryDir, config) {
|
|
|
830
913
|
*/
|
|
831
914
|
function checkProjectSize(entryDir, config) {
|
|
832
915
|
logger.info('start check project size');
|
|
833
|
-
const {
|
|
916
|
+
const { dev } = config;
|
|
917
|
+
const { pkgSizeLimit } = getCheckConfig(config);
|
|
834
918
|
const enableDev = dev === null || dev === void 0 ? void 0 : dev.enable;
|
|
835
919
|
const gameSize = getProjectSize({ entryDir });
|
|
836
920
|
const gameSizeMB = (gameSize / (1024 * 1024)).toFixed(2);
|
|
@@ -867,11 +951,12 @@ const defaultCheckConfig$2 = {
|
|
|
867
951
|
*/
|
|
868
952
|
function checkMainPackageSize({ entryDir, config, }) {
|
|
869
953
|
logger.info('start check main package size');
|
|
870
|
-
const {
|
|
954
|
+
const { dev } = config;
|
|
955
|
+
const { mainPkgSizeLimit } = getCheckConfig(config);
|
|
871
956
|
const mainPkgSize = getMainPkgSize({ entryDir });
|
|
872
957
|
const mainPkgSizeMB = (mainPkgSize / (1024 * 1024)).toFixed(2);
|
|
873
|
-
const limitMB = (
|
|
874
|
-
if (mainPkgSize >
|
|
958
|
+
const limitMB = (mainPkgSizeLimit / (1024 * 1024)).toFixed(2);
|
|
959
|
+
if (mainPkgSize > mainPkgSizeLimit) {
|
|
875
960
|
const errMsg = `Check main package size failed, main package size ${mainPkgSizeMB}MB, must not exceed ${limitMB}MB`;
|
|
876
961
|
logger.error(errMsg);
|
|
877
962
|
if (dev === null || dev === void 0 ? void 0 : dev.enable) {
|
|
@@ -912,10 +997,7 @@ function checkMainPackage(entryDir, config) {
|
|
|
912
997
|
entryDir,
|
|
913
998
|
config,
|
|
914
999
|
}));
|
|
915
|
-
|
|
916
|
-
* 检查主包大小是否超出限制, 仅对非unity工程生效
|
|
917
|
-
*/
|
|
918
|
-
if (!isUnityEngine(entryDir) && ((_a = config.build) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit)) {
|
|
1000
|
+
if ((_a = getCheckConfig(config)) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit) {
|
|
919
1001
|
checkResults.push(checkMainPackageSize({
|
|
920
1002
|
entryDir,
|
|
921
1003
|
config,
|
|
@@ -1014,7 +1096,6 @@ function checkIndependentPackages(entryDir, config) {
|
|
|
1014
1096
|
logger.info('start check independent subpackages in game.json');
|
|
1015
1097
|
const independentSubpackages = getIndependentPackagesConfig(entryDir);
|
|
1016
1098
|
independentSubpackages.forEach(sub => {
|
|
1017
|
-
var _a;
|
|
1018
1099
|
/**
|
|
1019
1100
|
* 校验 independent subpackage 配置是否为空
|
|
1020
1101
|
*/
|
|
@@ -1061,8 +1142,8 @@ function checkIndependentPackages(entryDir, config) {
|
|
|
1061
1142
|
/**
|
|
1062
1143
|
* 校验 independent subpackage 包大小,不做校验
|
|
1063
1144
|
*/
|
|
1064
|
-
const independentSubPkgSizeLimit = (
|
|
1065
|
-
if (
|
|
1145
|
+
const { independentSubPkgSizeLimit } = getCheckConfig(config);
|
|
1146
|
+
if (independentSubPkgSizeLimit) {
|
|
1066
1147
|
const checkSizeResult = checkPkgSize({
|
|
1067
1148
|
entryDir: subpackageEntryDir,
|
|
1068
1149
|
pkgName: sub.name,
|
|
@@ -1090,7 +1171,6 @@ function checkPkgSize({ entryDir, limit, pkgName, dimension, }) {
|
|
|
1090
1171
|
const size = getDirSizeSync({
|
|
1091
1172
|
rootDir: entryDir,
|
|
1092
1173
|
entryDir,
|
|
1093
|
-
filterDirs: [],
|
|
1094
1174
|
});
|
|
1095
1175
|
const passed = size <= limit;
|
|
1096
1176
|
const sizeMB = size / 1024 / 1024;
|
|
@@ -1714,15 +1794,10 @@ function getSkipDirs({ packages, entryDir, }) {
|
|
|
1714
1794
|
if (packages) {
|
|
1715
1795
|
skipDirs.push(...Object.values(packages).map(item => item.root));
|
|
1716
1796
|
}
|
|
1717
|
-
// const { entry: openDataContextEntry } = getOpenDataContextEntry({ entryDir });
|
|
1718
|
-
// if (openDataContextEntry) {
|
|
1719
|
-
// skipDirs.push(openDataContextEntry);
|
|
1720
|
-
// }
|
|
1721
1797
|
return skipDirs;
|
|
1722
1798
|
}
|
|
1723
1799
|
async function makePkgs({ gameEntry, gameOutput, config, }) {
|
|
1724
1800
|
let startTime = Date.now();
|
|
1725
|
-
removeSystemUseless(gameEntry);
|
|
1726
1801
|
logger.info(`pack start,startTime:${startTime}`);
|
|
1727
1802
|
const { packages } = await setup(gameEntry, gameOutput);
|
|
1728
1803
|
const allDeps = collectDeps(gameEntry, packages);
|
|
@@ -1846,10 +1921,18 @@ async function mergePkgs(outputDir) {
|
|
|
1846
1921
|
logger.info('mergePkgs 完成');
|
|
1847
1922
|
}
|
|
1848
1923
|
|
|
1924
|
+
async function clearPkgs(entryDir, uselessDirs = ['node_modules', '__MACOSX']) {
|
|
1925
|
+
removeSystemUseless(entryDir, uselessDirs);
|
|
1926
|
+
}
|
|
1927
|
+
|
|
1849
1928
|
async function debugPkgs(config) {
|
|
1850
1929
|
const { entry: entryDir, output: outputDir, dev: { enableLog }, } = config;
|
|
1851
1930
|
logger.init(outputDir, enableLog);
|
|
1852
1931
|
try {
|
|
1932
|
+
/**
|
|
1933
|
+
* 清理
|
|
1934
|
+
*/
|
|
1935
|
+
clearPkgs(entryDir);
|
|
1853
1936
|
/**
|
|
1854
1937
|
* 校验
|
|
1855
1938
|
*/
|
|
@@ -1888,13 +1971,16 @@ async function debugPkgs(config) {
|
|
|
1888
1971
|
}
|
|
1889
1972
|
}
|
|
1890
1973
|
|
|
1891
|
-
async function buildPkgs(
|
|
1892
|
-
const { entry: entryDir, output: outputDir, build } =
|
|
1974
|
+
async function buildPkgs(config) {
|
|
1975
|
+
const { entry: entryDir, output: outputDir, build } = config;
|
|
1893
1976
|
let startTime = Date.now();
|
|
1894
1977
|
logger.init(outputDir, true);
|
|
1895
|
-
logger.info(`TTMG_PACK_VERSION: ${"0.2.
|
|
1978
|
+
logger.info(`TTMG_PACK_VERSION: ${"0.2.9"}`);
|
|
1896
1979
|
logger.info(`pack start, startTime:${startTime}`);
|
|
1897
|
-
|
|
1980
|
+
/**
|
|
1981
|
+
* 清理
|
|
1982
|
+
*/
|
|
1983
|
+
clearPkgs(entryDir, ['node_modules', '__MACOSX', TTMG_TEMP_DIR]);
|
|
1898
1984
|
/**
|
|
1899
1985
|
* 校验
|
|
1900
1986
|
*/
|
|
@@ -1939,7 +2025,6 @@ async function getPkgs({ entryDir, }) {
|
|
|
1939
2025
|
size: getDirSizeSync({
|
|
1940
2026
|
rootDir: entryDir,
|
|
1941
2027
|
entryDir: path.join(entryDir, sub.root),
|
|
1942
|
-
filterDirs: [],
|
|
1943
2028
|
}),
|
|
1944
2029
|
name: sub.name,
|
|
1945
2030
|
root: sub.root,
|
|
@@ -1964,6 +2049,7 @@ async function getPkgs({ entryDir, }) {
|
|
|
1964
2049
|
};
|
|
1965
2050
|
}
|
|
1966
2051
|
|
|
2052
|
+
exports.TTMG_TEMP_DIR = TTMG_TEMP_DIR;
|
|
1967
2053
|
exports.buildOdrPkgs = buildOdrPkgs;
|
|
1968
2054
|
exports.buildPkgs = buildPkgs;
|
|
1969
2055
|
exports.checkPkgs = checkPkgs;
|