ttmg-pack 0.3.4 → 0.3.6

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.
Files changed (31) hide show
  1. package/CHANGELOG.md +359 -0
  2. package/dist/index.js +197 -302
  3. package/dist/index.js.map +1 -1
  4. package/dist/libs/buildPkgs/index.d.ts +0 -1
  5. package/dist/libs/buildPlugins/index.d.ts +1 -1
  6. package/dist/libs/checkPkgs/checkAPI.d.ts +1 -4
  7. package/dist/libs/checkPkgs/checkIndependentPackages.d.ts +3 -2
  8. package/dist/libs/checkPkgs/checkMainpackage.d.ts +3 -9
  9. package/dist/libs/checkPkgs/checkPkgPath.d.ts +1 -0
  10. package/dist/libs/checkPkgs/checkProject.d.ts +3 -4
  11. package/dist/libs/checkPkgs/checkSubpackages.d.ts +1 -1
  12. package/dist/libs/checkPkgs/index.d.ts +1 -4
  13. package/dist/libs/clearPkgs/index.d.ts +2 -1
  14. package/dist/libs/extractPkgs/hasAnyNodeModulesShallow.d.ts +1 -0
  15. package/dist/libs/extractPkgs/index.d.ts +6 -0
  16. package/dist/libs/index.d.ts +1 -0
  17. package/dist/libs/makePkgs/collectDeps.d.ts +3 -2
  18. package/dist/libs/makePkgs/collectMaps.d.ts +2 -2
  19. package/dist/libs/makePkgs/extract/NodeModuleExtractor.d.ts +39 -0
  20. package/dist/libs/makePkgs/extract/hasAnyNodeModulesShallow.d.ts +1 -0
  21. package/dist/libs/makePkgs/extract/index.d.ts +6 -0
  22. package/dist/libs/makePkgs/extract.d.ts +4 -0
  23. package/dist/libs/makePkgs/index.d.ts +1 -10
  24. package/dist/libs/makePkgs/setup.d.ts +14 -5
  25. package/dist/libs/makePlugins/collectPluginMaps.d.ts +2 -0
  26. package/dist/libs/makePlugins/index.d.ts +6 -0
  27. package/dist/libs/makePlugins/packPlugin.d.ts +13 -0
  28. package/dist/typings/index.d.ts +3 -0
  29. package/dist/utils/NodeModuleExtractor.d.ts +38 -0
  30. package/dist/utils/overrideConfig.d.ts +1 -1
  31. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * ==========================================
3
3
  * @Description: ttmg pack
4
- * @Version: 0.3.4
4
+ * @Version: 0.3.6
5
5
  * @Author: zhanghongyang.mocha
6
- * @Date: 2026-02-06 16:52:17
6
+ * @Date: 2026-02-28 16:23:17
7
7
  * ==========================================
8
8
  */
9
9
  'use strict';
@@ -390,10 +390,12 @@ function getIndependentPackagesConfig(entryDir) {
390
390
  }
391
391
 
392
392
  function getMainPkgSize({ entryDir }) {
393
+ // 先获取分包根目录,这样如果有 subPackages 配置错误,会在这里抛出
394
+ const subpackagesRoots = getSubpackagesRoots(entryDir);
393
395
  return getDirSizeSync({
394
396
  rootDir: entryDir,
395
397
  entryDir,
396
- filterDirs: [...getSubpackagesRoots(entryDir), ...USELESS_DIRS],
398
+ filterDirs: [...subpackagesRoots, ...USELESS_DIRS],
397
399
  });
398
400
  }
399
401
  function getSubpackagesRoots(entryDir) {
@@ -401,6 +403,10 @@ function getSubpackagesRoots(entryDir) {
401
403
  const originConfigPath = path.join(entryDir, GAME_ORIGIN_CONFIG_FILE_NAME);
402
404
  try {
403
405
  const originConfig = JSON.parse(fs.readFileSync(originConfigPath, 'utf8'));
406
+ // 检查是否使用了小驼峰命名
407
+ if (originConfig.subPackages) {
408
+ throw new Error('Error: \'subPackages\' is found in game.json. Please use \'subpackages\' (all lowercase) instead.');
409
+ }
404
410
  const roots = ((_a = originConfig.subpackages) === null || _a === void 0 ? void 0 : _a.map((item) => item.root)) ||
405
411
  [];
406
412
  /**
@@ -409,7 +415,7 @@ function getSubpackagesRoots(entryDir) {
409
415
  return roots.map(root => root.replace(/^\/|\/$/g, ''));
410
416
  }
411
417
  catch (e) {
412
- return [];
418
+ throw e;
413
419
  }
414
420
  }
415
421
 
@@ -629,40 +635,6 @@ function getCheckConfig(config) {
629
635
  }
630
636
  }
631
637
 
632
- function copyDirectory(src, dest) {
633
- try {
634
- if (!fs.existsSync(dest)) {
635
- fs.mkdirSync(dest, { recursive: true });
636
- }
637
- const items = fs.readdirSync(src);
638
- const normalizedDest = path.resolve(dest) + path.sep;
639
- items.forEach(item => {
640
- const srcPath = path.join(src, item);
641
- const destPath = path.join(dest, item);
642
- // 检查当前要处理的源路径是否就是目标路径
643
- // 这可以防止将目标目录本身复制到自身中
644
- if (path.resolve(srcPath) === path.resolve(dest)) {
645
- return; // 跳过目标目录本身
646
- }
647
- // 获取文件状态
648
- const stat = fs.statSync(srcPath);
649
- if (stat.isFile()) {
650
- // 复制文件
651
- fs.copyFileSync(srcPath, destPath);
652
- }
653
- else if (stat.isDirectory()) {
654
- const childNormalizedSrc = path.resolve(srcPath) + path.sep;
655
- if (!normalizedDest.startsWith(childNormalizedSrc)) {
656
- copyDirectory(srcPath, destPath);
657
- }
658
- }
659
- });
660
- }
661
- catch (error) {
662
- logger.error(`copyDirectory error: ${error}`);
663
- }
664
- }
665
-
666
638
  /**
667
639
  * 将 packageConfig packages 中 分拆的包 配置迁移到 odr_packages 中
668
640
  */
@@ -918,40 +890,50 @@ const defaultCheckConfig$3 = {
918
890
  name: 'project',
919
891
  dimension: CHECK_DIMENSION.Project,
920
892
  };
921
- function checkProject(entryDir, config) {
893
+ function checkProject(config) {
922
894
  logger.info('start check project');
923
- const checkSizeResult = checkProjectSize(entryDir, config);
924
- const gameJsonCheckResult = checkGameJson(entryDir, config);
925
- // const projectConfigCheckResult = checkProjectConfig(entryDir, config);
895
+ const gameJsonCheckResult = checkGameJson(config);
896
+ const checkSizeResult = checkProjectSize(config);
926
897
  const result = [
927
- checkSizeResult,
928
898
  gameJsonCheckResult,
929
- // projectConfigCheckResult,
899
+ checkSizeResult,
930
900
  ];
931
901
  if (result.every(item => item.passed)) {
932
902
  logger.info('check project successfully');
933
903
  }
934
904
  return result;
935
905
  }
936
- function checkGameJson(entryDir, config) {
937
- var _a;
906
+ function checkGameJson(config) {
907
+ var _a, _b;
938
908
  logger.info('start check config');
939
- const gameJsonPath = path.join(entryDir, GAME_ORIGIN_CONFIG_FILE_NAME);
909
+ const gameJsonPath = path.join(config.entry, GAME_ORIGIN_CONFIG_FILE_NAME);
940
910
  if (!fs.existsSync(gameJsonPath)) {
941
911
  const errMsg = 'Can not find game.json in game source code, please check it';
942
912
  logger.error(errMsg);
943
913
  if ((_a = config === null || config === void 0 ? void 0 : config.dev) === null || _a === void 0 ? void 0 : _a.enable) {
944
914
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
945
- return Object.assign({ passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$3);
915
+ return Object.assign({ passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: 'project' }, defaultCheckConfig$3);
946
916
  }
947
917
  else {
948
918
  throw new Error(errMsg);
949
919
  }
950
920
  }
951
921
  else {
922
+ const gameJson = JSON.parse(fs.readFileSync(gameJsonPath, 'utf-8'));
923
+ if (gameJson.subPackages) {
924
+ const errMsg = `Error: 'subPackages' is found in ${GAME_ORIGIN_CONFIG_FILE_NAME}. Please use 'subpackages' (all lowercase) instead.`;
925
+ if ((_b = config === null || config === void 0 ? void 0 : config.dev) === null || _b === void 0 ? void 0 : _b.enable) {
926
+ logger.error(errMsg);
927
+ console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
928
+ return Object.assign({ passed: false, msg: errMsg, type: 'config', name: 'project', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$3);
929
+ }
930
+ else {
931
+ throw new Error(errMsg);
932
+ }
933
+ }
952
934
  const msg = 'Check game.json config successfully';
953
935
  logger.info(msg);
954
- return Object.assign({ passed: true, msg, file: GAME_ORIGIN_CONFIG_FILE_NAME, type: 'config' }, defaultCheckConfig$3);
936
+ return Object.assign({ passed: true, msg, type: 'config', level: 'info', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$3);
955
937
  }
956
938
  }
957
939
  /**
@@ -959,9 +941,9 @@ function checkGameJson(entryDir, config) {
959
941
  * @param param0
960
942
  * @returns
961
943
  */
962
- function checkProjectSize(entryDir, config) {
944
+ function checkProjectSize(config) {
963
945
  logger.info('start check project size');
964
- const { dev } = config;
946
+ const { entry: entryDir, dev } = config;
965
947
  const { pkgSizeLimit } = getCheckConfig(config);
966
948
  const enableDev = dev === null || dev === void 0 ? void 0 : dev.enable;
967
949
  const gameSize = getProjectSize({ entryDir });
@@ -972,7 +954,7 @@ function checkProjectSize(entryDir, config) {
972
954
  logger.error(errMsg);
973
955
  if (enableDev) {
974
956
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', errMsg);
975
- return Object.assign({ passed: false, msg: errMsg, type: 'size', size: gameSize }, defaultCheckConfig$3);
957
+ return Object.assign({ passed: false, name: 'project', msg: errMsg, type: 'size', level: 'warning', size: gameSize }, defaultCheckConfig$3);
976
958
  }
977
959
  else {
978
960
  throw new Error(errMsg);
@@ -984,7 +966,7 @@ function checkProjectSize(entryDir, config) {
984
966
  */
985
967
  const logMsg = `Check project size successfully, size: ${gameSizeMB}MB`;
986
968
  logger.info(logMsg);
987
- return Object.assign({ passed: true, msg: logMsg, name: 'project', type: 'size', size: gameSize }, defaultCheckConfig$3);
969
+ return Object.assign({ passed: true, msg: logMsg, name: 'project', type: 'size', level: 'info', size: gameSize }, defaultCheckConfig$3);
988
970
  }
989
971
  }
990
972
 
@@ -997,9 +979,9 @@ const defaultCheckConfig$2 = {
997
979
  * @param param0
998
980
  * @returns
999
981
  */
1000
- function checkMainPackageSize({ entryDir, config, }) {
982
+ function checkMainPackageSize(config) {
1001
983
  logger.info('start check main package size');
1002
- const { dev } = config;
984
+ const { entry: entryDir, dev } = config;
1003
985
  const { mainPkgSizeLimit } = getCheckConfig(config);
1004
986
  const mainPkgSize = getMainPkgSize({ entryDir });
1005
987
  const mainPkgSizeMB = (mainPkgSize / (1024 * 1024)).toFixed(2);
@@ -1009,47 +991,42 @@ function checkMainPackageSize({ entryDir, config, }) {
1009
991
  logger.error(errMsg);
1010
992
  if (dev === null || dev === void 0 ? void 0 : dev.enable) {
1011
993
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
1012
- return Object.assign({ passed: false, msg: errMsg, size: mainPkgSize, type: 'size' }, defaultCheckConfig$2);
994
+ return Object.assign({ passed: false, msg: errMsg, size: mainPkgSize, type: 'size', level: 'warning' }, defaultCheckConfig$2);
1013
995
  }
1014
996
  else {
1015
997
  throw new Error(errMsg);
1016
998
  }
1017
999
  }
1018
1000
  else {
1019
- return Object.assign({ passed: true, msg: `Check main package size successfully, size: ${mainPkgSizeMB}MB`, size: mainPkgSize, type: 'size' }, defaultCheckConfig$2);
1001
+ return Object.assign({ passed: true, msg: `Check main package size successfully, size: ${mainPkgSizeMB}MB`, size: mainPkgSize, type: 'size', level: 'info' }, defaultCheckConfig$2);
1020
1002
  }
1021
1003
  }
1022
- function checkMainPackageEntry({ entryDir, config, }) {
1004
+ function checkMainPackageEntry(config) {
1023
1005
  var _a;
1024
1006
  logger.info('start check main package entry');
1007
+ const { entry: entryDir } = config;
1025
1008
  const gameJsPath = path__namespace.join(entryDir, 'game.js');
1026
1009
  if (!fs__namespace.existsSync(gameJsPath)) {
1027
1010
  const errMsg = 'Check main package entry failed, game.js must exist in main package!';
1028
1011
  logger.error(errMsg);
1029
1012
  if ((_a = config.dev) === null || _a === void 0 ? void 0 : _a.enable) {
1030
1013
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', errMsg);
1031
- return Object.assign({ passed: false, msg: errMsg, type: 'config', file: 'game.js' }, defaultCheckConfig$2);
1014
+ return Object.assign({ passed: false, msg: errMsg, type: 'config', level: 'error', file: 'game.js' }, defaultCheckConfig$2);
1032
1015
  }
1033
1016
  }
1034
1017
  logger.info('check game.js successfully');
1035
- return Object.assign({ passed: true, msg: 'Check main package entry successfully, game.js must exist in main package!', type: 'config', file: 'game.js' }, defaultCheckConfig$2);
1018
+ return Object.assign({ passed: true, msg: 'Check main package entry successfully, game.js must exist in main package!', type: 'config', level: 'info', file: 'game.js' }, defaultCheckConfig$2);
1036
1019
  }
1037
- function checkMainPackage(entryDir, config) {
1020
+ function checkMainPackage(config) {
1038
1021
  var _a;
1039
1022
  const checkResults = [];
1040
1023
  logger.info('start check main package');
1041
1024
  /**
1042
1025
  * 检查 game.js 是否存在
1043
1026
  */
1044
- checkResults.push(checkMainPackageEntry({
1045
- entryDir,
1046
- config,
1047
- }));
1027
+ checkResults.push(checkMainPackageEntry(config));
1048
1028
  if ((_a = getCheckConfig(config)) === null || _a === void 0 ? void 0 : _a.mainPkgSizeLimit) {
1049
- checkResults.push(checkMainPackageSize({
1050
- entryDir,
1051
- config,
1052
- }));
1029
+ checkResults.push(checkMainPackageSize(config));
1053
1030
  }
1054
1031
  if (checkResults.every(item => item.passed)) {
1055
1032
  logger.info('Check main package successfully');
@@ -1067,7 +1044,8 @@ const defaultCheckConfig$1 = {
1067
1044
  name: 'subpackage',
1068
1045
  dimension: 'subpackage',
1069
1046
  };
1070
- function checkSubpackages(entryDir, config) {
1047
+ function checkSubpackages(config) {
1048
+ const { entry: entryDir } = config;
1071
1049
  const checkResults = [];
1072
1050
  /**
1073
1051
  * 校验 subpackage 大小
@@ -1085,7 +1063,7 @@ function checkSubpackages(entryDir, config) {
1085
1063
  logger.error(errMsg);
1086
1064
  if ((_a = config === null || config === void 0 ? void 0 : config.dev) === null || _a === void 0 ? void 0 : _a.enable) {
1087
1065
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
1088
- checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1066
+ checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1089
1067
  }
1090
1068
  else {
1091
1069
  throw new Error(errMsg);
@@ -1096,14 +1074,14 @@ function checkSubpackages(entryDir, config) {
1096
1074
  logger.error(errMsg);
1097
1075
  if ((_b = config === null || config === void 0 ? void 0 : config.dev) === null || _b === void 0 ? void 0 : _b.enable) {
1098
1076
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
1099
- checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1077
+ checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1100
1078
  }
1101
1079
  else {
1102
1080
  throw new Error(errMsg);
1103
1081
  }
1104
1082
  }
1105
1083
  else {
1106
- checkResults.push(Object.assign({ passed: true, msg: `Check subpackage<${sub.name}> config successfully`, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1084
+ checkResults.push(Object.assign({ passed: true, msg: `Check subpackage<${sub.name}> config successfully`, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1107
1085
  }
1108
1086
  /**
1109
1087
  * 校验 subpackage 配置是否有效
@@ -1115,14 +1093,14 @@ function checkSubpackages(entryDir, config) {
1115
1093
  logger.error(errMsg);
1116
1094
  if ((_c = config === null || config === void 0 ? void 0 : config.dev) === null || _c === void 0 ? void 0 : _c.enable) {
1117
1095
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
1118
- checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1096
+ checkResults.push(Object.assign({ passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1119
1097
  }
1120
1098
  else {
1121
1099
  throw new Error(errMsg);
1122
1100
  }
1123
1101
  }
1124
1102
  else {
1125
- checkResults.push(Object.assign({ passed: true, msg: `Check subpackage<${sub.name}> config successfully`, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1103
+ checkResults.push(Object.assign({ passed: true, msg: `Check subpackage<${sub.name}> config successfully`, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME }, defaultCheckConfig$1));
1126
1104
  }
1127
1105
  });
1128
1106
  if (checkResults.length && checkResults.every(item => item.passed)) {
@@ -1134,8 +1112,9 @@ function checkSubpackages(entryDir, config) {
1134
1112
  const defaultCheckConfig = {
1135
1113
  dimension: CHECK_DIMENSION.IndependentPackage,
1136
1114
  };
1137
- function checkIndependentPackages(entryDir, config) {
1115
+ function checkIndependentPackages(config) {
1138
1116
  var _a;
1117
+ const { entry: entryDir } = config;
1139
1118
  const isEnableDev = (_a = config === null || config === void 0 ? void 0 : config.dev) === null || _a === void 0 ? void 0 : _a.enable;
1140
1119
  const checkResults = [];
1141
1120
  /**
@@ -1152,14 +1131,14 @@ function checkIndependentPackages(entryDir, config) {
1152
1131
  logger.error(errMsg);
1153
1132
  if (isEnableDev) {
1154
1133
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️${errMsg}`);
1155
- checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1134
+ checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1156
1135
  }
1157
1136
  else {
1158
1137
  throw new Error(errMsg);
1159
1138
  }
1160
1139
  }
1161
1140
  else {
1162
- checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: true, msg: `Check independent package<${sub.name}> config successfully`, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1141
+ checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: true, msg: `Check independent package<${sub.name}> config successfully`, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1163
1142
  }
1164
1143
  /**
1165
1144
  * 校验 independent subpackage 配置是否有效
@@ -1171,7 +1150,7 @@ function checkIndependentPackages(entryDir, config) {
1171
1150
  logger.error(errMsg);
1172
1151
  if (isEnableDev) {
1173
1152
  console.log('\x1b[1m\x1b[33m%s\x1b[0m', `❗️ ${errMsg}`);
1174
- checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: false, msg: errMsg, type: 'config', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1153
+ checkResults.push(Object.assign(Object.assign({}, defaultCheckConfig), { passed: false, msg: errMsg, type: 'config', level: 'error', file: GAME_ORIGIN_CONFIG_FILE_NAME, name: sub.name }));
1175
1154
  }
1176
1155
  else {
1177
1156
  throw new Error(errMsg);
@@ -1182,6 +1161,7 @@ function checkIndependentPackages(entryDir, config) {
1182
1161
  passed: true,
1183
1162
  msg: `Check independent package<${sub.name}> config successfully`,
1184
1163
  type: 'config',
1164
+ level: 'error',
1185
1165
  file: GAME_ORIGIN_CONFIG_FILE_NAME,
1186
1166
  dimension: CHECK_DIMENSION.IndependentPackage,
1187
1167
  name: sub.name,
@@ -1197,6 +1177,7 @@ function checkIndependentPackages(entryDir, config) {
1197
1177
  pkgName: sub.name,
1198
1178
  limit: independentSubPkgSizeLimit,
1199
1179
  dimension: CHECK_DIMENSION.IndependentPackage,
1180
+ level: isEnableDev ? 'warning' : 'error',
1200
1181
  });
1201
1182
  checkResults.push(checkSizeResult);
1202
1183
  logger.info(checkSizeResult.msg);
@@ -1215,7 +1196,7 @@ function checkIndependentPackages(entryDir, config) {
1215
1196
  }
1216
1197
  return checkResults;
1217
1198
  }
1218
- function checkPkgSize({ entryDir, limit, pkgName, dimension, }) {
1199
+ function checkPkgSize({ entryDir, limit, pkgName, dimension, level, }) {
1219
1200
  const size = getDirSizeSync({
1220
1201
  rootDir: entryDir,
1221
1202
  entryDir,
@@ -1229,6 +1210,7 @@ function checkPkgSize({ entryDir, limit, pkgName, dimension, }) {
1229
1210
  ? `Check package ${pkgName} size ${sizeMB.toFixed(2)}MB check successfully`
1230
1211
  : `Check package ${pkgName} size ${sizeMB.toFixed(2)}MB exceeds limit ${limitMB.toFixed(2)}MB`,
1231
1212
  type: 'size',
1213
+ level,
1232
1214
  size,
1233
1215
  dimension,
1234
1216
  name: pkgName,
@@ -1264,7 +1246,7 @@ const API_LIST = [
1264
1246
  desc: "Get entrance mission reward"
1265
1247
  }
1266
1248
  ];
1267
- function checkAPI({ entryDir, config, }) {
1249
+ function checkAPI(config) {
1268
1250
  var _a;
1269
1251
  if (!((_a = config === null || config === void 0 ? void 0 : config.build) === null || _a === void 0 ? void 0 : _a.enableAPICheck)) {
1270
1252
  return [];
@@ -1289,7 +1271,7 @@ function checkAPI({ entryDir, config, }) {
1289
1271
  hitFilesMap.set(name, new Set());
1290
1272
  }
1291
1273
  // 深度优先遍历
1292
- const stack = [entryDir];
1274
+ const stack = [config.entry];
1293
1275
  while (stack.length) {
1294
1276
  const current = stack.pop();
1295
1277
  const stat = fs.statSync(current);
@@ -1338,6 +1320,7 @@ function checkAPI({ entryDir, config, }) {
1338
1320
  passed: files.length > 0,
1339
1321
  files,
1340
1322
  type: 'api',
1323
+ level: 'warning',
1341
1324
  required: false,
1342
1325
  dimension: 'project',
1343
1326
  };
@@ -1351,28 +1334,28 @@ function escapeRegex(s) {
1351
1334
  return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
1352
1335
  }
1353
1336
 
1354
- async function checkPkgs({ entryDir, config, }) {
1337
+ async function checkPkgs(config) {
1355
1338
  logger.info('开始校验项目');
1356
1339
  /**
1357
1340
  * 1. 校验项目
1358
1341
  */
1359
- const projectCheckResult = checkProject(entryDir, config);
1342
+ const projectCheckResult = checkProject(config);
1360
1343
  /**
1361
- * 2. 校验主包
1344
+ * 2. 如果有,校验分包
1362
1345
  */
1363
- const mainPackageCheckResult = checkMainPackage(entryDir, config);
1346
+ const subpackagesCheckResult = checkSubpackages(config);
1364
1347
  /**
1365
- * 3. 如果有,校验分包
1348
+ * 3. 校验主包
1366
1349
  */
1367
- const subpackagesCheckResult = checkSubpackages(entryDir, config);
1350
+ const mainPackageCheckResult = checkMainPackage(config);
1368
1351
  /**
1369
1352
  * 校验独立分包
1370
1353
  */
1371
- const independentPackagesCheckResult = checkIndependentPackages(entryDir, config);
1354
+ const independentPackagesCheckResult = checkIndependentPackages(config);
1372
1355
  /**
1373
1356
  * 校验 API 调用
1374
1357
  */
1375
- const apiCheckResult = checkAPI({ entryDir, config });
1358
+ const apiCheckResult = checkAPI(config);
1376
1359
  return [
1377
1360
  ...projectCheckResult,
1378
1361
  ...mainPackageCheckResult,
@@ -1382,7 +1365,8 @@ async function checkPkgs({ entryDir, config, }) {
1382
1365
  ];
1383
1366
  }
1384
1367
 
1385
- async function setup(entryDir, outputDir) {
1368
+ async function setup(config) {
1369
+ const { entry: entryDir, output: outputDir } = config;
1386
1370
  logger.info('开始基于源代码中的 game.json 生成 packageConfig.json');
1387
1371
  const gameJsonPath = path.join(entryDir, GAME_ORIGIN_CONFIG_FILE_NAME);
1388
1372
  const gameJson = JSON.parse(fs.readFileSync(gameJsonPath, 'utf-8'));
@@ -1510,7 +1494,8 @@ function collectPkgJsFiles({ entry, root, exts = ['.js', '.ts', '.jsx', '.tsx'],
1510
1494
  return files;
1511
1495
  }
1512
1496
  // 构建每个包的 map
1513
- function collectMaps(entryDir, packages) {
1497
+ function collectMaps(config, packages) {
1498
+ const { entry: entryDir } = config;
1514
1499
  logger.info('开始基于游戏源代码收集分包中的 JS 文件');
1515
1500
  const result = {};
1516
1501
  // 1. 先收集所有分包根目录名(如 subpackages/level1、subpackages/level2)
@@ -1563,29 +1548,95 @@ function collectMaps(entryDir, packages) {
1563
1548
  logger.info('基于游戏源代码收集分包中的 JS 文件完成');
1564
1549
  return result;
1565
1550
  }
1566
- function collectPluginMaps(gameDir, entryDir, name) {
1567
- logger.info('开始基于插件源代码收集分包中的 JS 文件');
1568
- const result = {};
1569
- let jsFiles;
1570
- jsFiles = collectPkgJsFiles({
1571
- entry: entryDir,
1572
- root: entryDir,
1573
- exts: ['.js', '.ts', '.jsx', '.tsx'],
1574
- excludeDirs: [],
1575
- });
1576
- const list = [];
1577
- jsFiles.forEach(absPath => {
1578
- list.push(path.relative(gameDir, absPath).replace(/\\/g, '/'));
1551
+
1552
+ /**
1553
+ * 根据 TikTok DevPortal 接口获取插件包信息(url + md5)
1554
+ *
1555
+ * 对应 curl:
1556
+ * POST https://developers.tiktok.com/tiktok/v4/devportal/minigame/plugin_meta/get
1557
+ * body: { plugin_name, plugin_version }
1558
+ */
1559
+ async function getPluginInfo(params) {
1560
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1561
+ const baseUrl = (_a = params.baseUrl) !== null && _a !== void 0 ? _a : 'https://developers.tiktok.com';
1562
+ const url = `${baseUrl}/tiktok/v4/devportal/minigame/plugin_meta/get`;
1563
+ const res = await fetch(url, {
1564
+ method: 'POST',
1565
+ headers: Object.assign({ 'Content-Type': 'application/json' }, ((_b = params.headers) !== null && _b !== void 0 ? _b : {})),
1566
+ body: JSON.stringify({
1567
+ plugin_name: params.plugin_name,
1568
+ plugin_version: params.plugin_version,
1569
+ }),
1579
1570
  });
1580
- const packNameRoot = name;
1581
- result[name] = {
1582
- [`${packNameRoot}/game.pack.js`]: list,
1583
- };
1584
- logger.info('基于插件源代码收集分包中的 JS 文件完成');
1585
- return result;
1571
+ const json = await res.json();
1572
+ const meta = (_g = (_e = (_c = json === null || json === void 0 ? void 0 : json.PluginMeta) !== null && _c !== void 0 ? _c : (_d = json === null || json === void 0 ? void 0 : json.data) === null || _d === void 0 ? void 0 : _d.PluginMeta) !== null && _e !== void 0 ? _e : (_f = json === null || json === void 0 ? void 0 : json.result) === null || _f === void 0 ? void 0 : _f.PluginMeta) !== null && _g !== void 0 ? _g : (_j = (_h = json === null || json === void 0 ? void 0 : json.data) === null || _h === void 0 ? void 0 : _h.result) === null || _j === void 0 ? void 0 : _j.PluginMeta;
1573
+ if (!(meta === null || meta === void 0 ? void 0 : meta.PackageCDNURL) || !(meta === null || meta === void 0 ? void 0 : meta.PackageMD5)) {
1574
+ throw new Error(`[ttmg-pack]: The current game plugin version does not exist. plugin_name: ${params.plugin_name}, plugin_version: ${params.plugin_version}, error: ${JSON.stringify(json)}`);
1575
+ }
1576
+ return { url: meta.PackageCDNURL, md5: meta.PackageMD5 };
1577
+ }
1578
+ async function addDepsToPackages(gameEntry, outputDir, allDeps) {
1579
+ var _a;
1580
+ const gamePackConfigPath = path.join(outputDir, GAME_PACK_CONFIG_FILE_NAME);
1581
+ const gameJsonPath = path.join(gameEntry, GAME_ORIGIN_CONFIG_FILE_NAME);
1582
+ let gamePackConfig;
1583
+ let gameJson;
1584
+ let pluginConfig;
1585
+ try {
1586
+ gamePackConfig = JSON.parse(fs.readFileSync(gamePackConfigPath, 'utf-8'));
1587
+ gameJson = JSON.parse(fs.readFileSync(gameJsonPath, 'utf-8'));
1588
+ pluginConfig = gameJson.plugins;
1589
+ }
1590
+ catch (error) {
1591
+ throw new Error('[ttmg-pack] Failed to read package file game.json or packageConfig.json');
1592
+ }
1593
+ const unityDeps = ['data-package', 'StreamingAssets', 'wasmcode', 'wasmcode-android', 'wasmcode-ios'];
1594
+ for (const dep of unityDeps) {
1595
+ // 如果 game.json 的 subpackages 里有这个包,则添加进 __GAME__ 的 dependencies
1596
+ if (((_a = gameJson.subpackages) !== null && _a !== void 0 ? _a : []).some(pkg => pkg.name === dep)) {
1597
+ gamePackConfig.packages[GAME_MAIN_PACKAGE_NAME].dependencies.push(dep);
1598
+ }
1599
+ }
1600
+ for (const [pkgName, plugins] of Object.entries(allDeps)) {
1601
+ for (const pluginName of plugins) {
1602
+ if (!(pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig[pluginName]))
1603
+ continue;
1604
+ const version = pluginConfig[pluginName].version;
1605
+ const pluginPkgName = `${pluginName}_${version}`;
1606
+ const { url, md5 } = await getPluginInfo({
1607
+ plugin_name: pluginName.toLowerCase(),
1608
+ plugin_version: version
1609
+ });
1610
+ gamePackConfig.packages[pkgName].dependencies.push(pluginPkgName);
1611
+ if (!gamePackConfig.packages[pluginPkgName]) {
1612
+ gamePackConfig.packages[pluginPkgName] = {
1613
+ url,
1614
+ md5,
1615
+ root: pluginPkgName,
1616
+ main: `${pluginPkgName}/index.js`,
1617
+ output: `${pluginPkgName}${STTPKG_EXT}`,
1618
+ independent: false,
1619
+ type: 'plugin',
1620
+ dependencies: [],
1621
+ };
1622
+ }
1623
+ else {
1624
+ // 如果已存在,也覆盖 url/md5,保证最新
1625
+ gamePackConfig.packages[pluginPkgName].url = url;
1626
+ gamePackConfig.packages[pluginPkgName].md5 = md5;
1627
+ }
1628
+ }
1629
+ }
1630
+ try {
1631
+ fs.writeFileSync(gamePackConfigPath, JSON.stringify(gamePackConfig, null, 2));
1632
+ }
1633
+ catch (error) {
1634
+ throw new Error(`[ttmg-pack] Failed to write package file packageConfig.json: ${error.message} path: ${gamePackConfigPath}`);
1635
+ }
1586
1636
  }
1587
1637
 
1588
- function collectDeps(gameEntry, packages) {
1638
+ async function collectDeps(config, packages) {
1639
+ const { entry: gameEntry, output: gameOutput } = config;
1589
1640
  // 自动扫描 game 目录下的一级文件夹作为根前缀
1590
1641
  const rootPrefixes = getRootPrefixes(gameEntry);
1591
1642
  // 查找所有 JS 文件
@@ -1708,6 +1759,7 @@ function collectDeps(gameEntry, packages) {
1708
1759
  packageDeps: {},
1709
1760
  pluginDeps: {},
1710
1761
  });
1762
+ await addDepsToPackages(gameEntry, gameOutput, result.pluginDeps);
1711
1763
  return result;
1712
1764
  }
1713
1765
  function getRootPrefixes(gameEntry) {
@@ -1804,8 +1856,7 @@ async function pack({ gameEntry, pkgName, allDeps, allMaps, pkgConfig, destRoot,
1804
1856
  // });
1805
1857
  // const code = fs.readFileSync(absPath, 'utf-8');
1806
1858
  const fileId = relPath.replace(/\\/g, '/');
1807
- const schema = config.build.type === 'plugin' ? 'plugin' : 'game';
1808
- const defineHeader = `define("${schema}:${fileId}", ["require", "requireAsync", "module", "exports", "sandboxGlobal"], function(require, requireAsync, module, exports, sandboxGlobal){\nwith(sandboxGlobal){\n`;
1859
+ const defineHeader = `define("game:${fileId}", ["require", "requireAsync", "module", "exports", "sandboxGlobal"], function(require, requireAsync, module, exports, sandboxGlobal){\nwith(sandboxGlobal){\n`;
1809
1860
  const defineFooter = `\n}\n});\n`;
1810
1861
  const fileMagic = new MagicString(code, { filename: fileId });
1811
1862
  fileMagic.prepend(defineHeader);
@@ -1892,105 +1943,19 @@ async function partition({ pkgRoot, destRoot, packedFiles, gameEntry, gameOutput
1892
1943
  }
1893
1944
  }
1894
1945
 
1895
- /**
1896
- * 根据 TikTok DevPortal 接口获取插件包信息(url + md5)
1897
- *
1898
- * 对应 curl:
1899
- * POST https://developers.tiktok.com/tiktok/v4/devportal/minigame/plugin_meta/get
1900
- * body: { plugin_name, plugin_version }
1901
- */
1902
- async function getPluginInfo(params) {
1903
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
1904
- const baseUrl = (_a = params.baseUrl) !== null && _a !== void 0 ? _a : 'https://developers.tiktok.com';
1905
- const url = `${baseUrl}/tiktok/v4/devportal/minigame/plugin_meta/get`;
1906
- const res = await fetch(url, {
1907
- method: 'POST',
1908
- headers: Object.assign({ 'Content-Type': 'application/json' }, ((_b = params.headers) !== null && _b !== void 0 ? _b : {})),
1909
- body: JSON.stringify({
1910
- plugin_name: params.plugin_name,
1911
- plugin_version: params.plugin_version,
1912
- }),
1913
- });
1914
- const json = await res.json();
1915
- const meta = (_g = (_e = (_c = json === null || json === void 0 ? void 0 : json.PluginMeta) !== null && _c !== void 0 ? _c : (_d = json === null || json === void 0 ? void 0 : json.data) === null || _d === void 0 ? void 0 : _d.PluginMeta) !== null && _e !== void 0 ? _e : (_f = json === null || json === void 0 ? void 0 : json.result) === null || _f === void 0 ? void 0 : _f.PluginMeta) !== null && _g !== void 0 ? _g : (_j = (_h = json === null || json === void 0 ? void 0 : json.data) === null || _h === void 0 ? void 0 : _h.result) === null || _j === void 0 ? void 0 : _j.PluginMeta;
1916
- if (!(meta === null || meta === void 0 ? void 0 : meta.PackageCDNURL) || !(meta === null || meta === void 0 ? void 0 : meta.PackageMD5)) {
1917
- throw new Error(`[ttmg-pack]: The current game plugin version does not exist. plugin_name: ${params.plugin_name}, plugin_version: ${params.plugin_version}, error: ${JSON.stringify(json)}`);
1918
- }
1919
- return { url: meta.PackageCDNURL, md5: meta.PackageMD5 };
1920
- }
1921
- async function addDepsToPackages(gameEntry, outputDir, allDeps) {
1922
- const gamePackConfigPath = path.join(outputDir, GAME_PACK_CONFIG_FILE_NAME);
1923
- const gameJsonPath = path.join(gameEntry, GAME_ORIGIN_CONFIG_FILE_NAME);
1924
- let gamePackConfig;
1925
- let gameJson;
1926
- let pluginConfig;
1927
- try {
1928
- gamePackConfig = JSON.parse(fs.readFileSync(gamePackConfigPath, 'utf-8'));
1929
- gameJson = JSON.parse(fs.readFileSync(gameJsonPath, 'utf-8'));
1930
- pluginConfig = gameJson.plugins;
1931
- }
1932
- catch (error) {
1933
- throw new Error('[ttmg-pack] Failed to read package file game.json or packageConfig.json');
1934
- }
1935
- const unityDeps = ['data-package', 'StreamingAssets', 'wasmcode', 'wasmcode-android', 'wasmcode-ios'];
1936
- for (const dep of unityDeps) {
1937
- // 如果 game.json 的 subpackages 里有这个包,则添加进 __GAME__ 的 dependencies
1938
- if (gameJson.subpackages.some(pkg => pkg.name === dep)) {
1939
- gamePackConfig.packages[GAME_MAIN_PACKAGE_NAME].dependencies.push(dep);
1940
- }
1941
- }
1942
- for (const [pkgName, plugins] of Object.entries(allDeps)) {
1943
- for (const pluginName of plugins) {
1944
- if (!(pluginConfig === null || pluginConfig === void 0 ? void 0 : pluginConfig[pluginName]))
1945
- continue;
1946
- const version = pluginConfig[pluginName].version;
1947
- const pluginPkgName = `${pluginName}_${version}`;
1948
- const { url, md5 } = await getPluginInfo({
1949
- plugin_name: pluginName.toLowerCase(),
1950
- plugin_version: version
1951
- });
1952
- gamePackConfig.packages[pkgName].dependencies.push(pluginPkgName);
1953
- if (!gamePackConfig.packages[pluginPkgName]) {
1954
- gamePackConfig.packages[pluginPkgName] = {
1955
- url,
1956
- md5,
1957
- root: pluginPkgName,
1958
- main: `${pluginPkgName}/index.js`,
1959
- output: `${pluginPkgName}${STTPKG_EXT}`,
1960
- independent: false,
1961
- type: 'plugin',
1962
- dependencies: [],
1963
- };
1964
- }
1965
- else {
1966
- // 如果已存在,也覆盖 url/md5,保证最新
1967
- gamePackConfig.packages[pluginPkgName].url = url;
1968
- gamePackConfig.packages[pluginPkgName].md5 = md5;
1969
- }
1970
- }
1971
- }
1972
- fs.writeFileSync(gamePackConfigPath, JSON.stringify(gamePackConfig, null, 2));
1973
- }
1974
-
1975
- function getSkipDirs({ packages, entryDir, }) {
1976
- const skipDirs = [];
1977
- if (packages) {
1978
- skipDirs.push(...Object.values(packages).map(item => item.root));
1979
- }
1980
- return skipDirs;
1981
- }
1982
- async function makePkgs({ gameEntry, gameOutput, config, }) {
1946
+ async function makePkgs(config) {
1947
+ const { entry: gameEntry, output: gameOutput } = config;
1983
1948
  let startTime = Date.now();
1984
1949
  logger.info(`pack start,startTime:${startTime}`);
1985
- const { packages } = await setup(gameEntry, gameOutput);
1986
- const allDeps = collectDeps(gameEntry, packages);
1987
- await addDepsToPackages(gameEntry, gameOutput, allDeps.pluginDeps);
1988
- const allMaps = collectMaps(gameEntry, packages);
1950
+ const { packages } = await setup(config);
1951
+ const allDeps = await collectDeps(config, packages);
1952
+ const allMaps = collectMaps(config, packages);
1989
1953
  const pkgOutput = {};
1990
1954
  /**
1991
1955
  * 基于 asyncPool 并发打包
1992
1956
  */
1993
1957
  await asyncPool$1(10, Object.keys(allMaps), async (pkgName) => {
1958
+ var _a;
1994
1959
  logger.info(`开始基于游戏源代码打包,包名:${pkgName}`);
1995
1960
  let startTime = Date.now();
1996
1961
  const pkgConfig = packages[pkgName];
@@ -2017,7 +1982,7 @@ async function makePkgs({ gameEntry, gameOutput, config, }) {
2017
1982
  pkgRoot,
2018
1983
  destRoot,
2019
1984
  packedFiles: flattenMaps(allMaps),
2020
- skipDirs: getSkipDirs({ packages, entryDir: gameEntry }),
1985
+ skipDirs: ((_a = Object.values(packages)) === null || _a === void 0 ? void 0 : _a.map(item => item.root)) || [],
2021
1986
  });
2022
1987
  const pkgRootDir = path.join(gameOutput, pkgName);
2023
1988
  removeEmptyDir(pkgRootDir);
@@ -2034,46 +1999,6 @@ async function makePkgs({ gameEntry, gameOutput, config, }) {
2034
1999
  logger.info(`pack end,duration:${Date.now() - startTime}ms`);
2035
2000
  return pkgOutput;
2036
2001
  }
2037
- async function makePlugin({ gameEntry, gameOutput, config, }) {
2038
- try {
2039
- const pluginConfig = fs.readFileSync(path.join(gameEntry, 'plugin.json'), 'utf-8');
2040
- const { name, main, version } = JSON.parse(pluginConfig);
2041
- const pluginName = `${name}_${version}`;
2042
- // 把 entryDir 下的所有文件复制到 entryDir/plugin
2043
- const pluginDir = path.join(gameEntry, pluginName);
2044
- copyDirectory(gameEntry, pluginDir);
2045
- const packages = {
2046
- [pluginName]: {
2047
- url: '',
2048
- md5: '',
2049
- root: pluginName,
2050
- main,
2051
- output: `${pluginName}${STTPKG_EXT}`,
2052
- type: 'game',
2053
- dependencies: []
2054
- }
2055
- };
2056
- fs.writeFileSync(path.join(gameOutput, GAME_PACK_CONFIG_FILE_NAME), JSON.stringify({ packages }, null, 2));
2057
- const pluginEntry = path.join(gameEntry, pluginName);
2058
- const allMaps = collectPluginMaps(gameEntry, pluginEntry, pluginName);
2059
- await pack({
2060
- gameEntry,
2061
- allDeps: {
2062
- packageDeps: {},
2063
- pluginDeps: {},
2064
- },
2065
- allMaps,
2066
- pkgName: pluginName,
2067
- pkgConfig: packages[pluginName],
2068
- destRoot: path.join(gameOutput, pluginName, packages[pluginName].root),
2069
- config,
2070
- });
2071
- }
2072
- catch (error) {
2073
- logger.error('plugin.json 不存在');
2074
- return;
2075
- }
2076
- }
2077
2002
 
2078
2003
  /**
2079
2004
  * 将 packages 中的每个 package 下的文件内容合并到 outputDir 下,不保留 package name
@@ -2145,33 +2070,40 @@ async function mergePkgs(outputDir) {
2145
2070
  logger.info('mergePkgs 完成');
2146
2071
  }
2147
2072
 
2148
- async function clearPkgs(entryDir, uselessDirs = ['node_modules', '__MACOSX']) {
2149
- removeSystemUseless(entryDir, uselessDirs);
2073
+ async function clearPkgs(config, uselessDirs = ['node_modules', '__MACOSX']) {
2074
+ removeSystemUseless(config.entry, uselessDirs);
2150
2075
  }
2151
2076
 
2152
2077
  async function debugPkgs(config) {
2153
- const { entry: entryDir, output: outputDir, dev: { enableLog }, } = config;
2078
+ const { output: outputDir, dev: { enableLog }, } = config;
2154
2079
  logger.init(outputDir, enableLog);
2155
2080
  try {
2156
2081
  /**
2157
2082
  * 清理
2158
2083
  */
2159
- clearPkgs(entryDir);
2084
+ clearPkgs(config);
2160
2085
  /**
2161
2086
  * 校验
2162
2087
  */
2163
- const checkResults = await checkPkgs({
2164
- entryDir,
2165
- config,
2166
- });
2088
+ const checkResults = await checkPkgs(config);
2089
+ /**
2090
+ * 如果有任何 error 类型的校验项失败,则不再继续后续流程,直接返回错误
2091
+ */
2092
+ const errorResults = checkResults.filter(item => !item.passed && item.level === 'error');
2093
+ if (errorResults.length > 0) {
2094
+ const errorMsg = errorResults
2095
+ .map(item => `[${item.name || item.type}] ${item.msg}`)
2096
+ .join('\n');
2097
+ return {
2098
+ isSuccess: false,
2099
+ errorMsg: `Project validation failed (Errors):\n${errorMsg}`,
2100
+ checkResults,
2101
+ };
2102
+ }
2167
2103
  /**
2168
2104
  * 打包
2169
2105
  */
2170
- await makePkgs({
2171
- gameEntry: entryDir,
2172
- gameOutput: outputDir,
2173
- config,
2174
- });
2106
+ await makePkgs(config);
2175
2107
  /**
2176
2108
  * 合并
2177
2109
  */
@@ -2196,60 +2128,23 @@ async function debugPkgs(config) {
2196
2128
  }
2197
2129
 
2198
2130
  async function buildPkgs(config) {
2199
- var _a;
2200
- if (((_a = config === null || config === void 0 ? void 0 : config.build) === null || _a === void 0 ? void 0 : _a.type) === 'plugin') {
2201
- await buildPlugin(config);
2202
- return;
2203
- }
2204
- const { entry: entryDir, output: outputDir, build } = config;
2131
+ const { output: outputDir, build } = config;
2205
2132
  let startTime = Date.now();
2206
2133
  logger.init(outputDir, true);
2207
- logger.info(`TTMG_PACK_VERSION: ${"0.3.4"}`);
2134
+ logger.info(`TTMG_PACK_VERSION: ${"0.3.6"}`);
2208
2135
  logger.info(`pack start, startTime:${startTime}`);
2209
2136
  /**
2210
2137
  * 清理
2211
2138
  */
2212
- clearPkgs(entryDir, ['node_modules', '__MACOSX', TTMG_TEMP_DIR]);
2139
+ await clearPkgs(config, ['node_modules', '__MACOSX', TTMG_TEMP_DIR]);
2213
2140
  /**
2214
2141
  * 校验
2215
2142
  */
2216
- await checkPkgs({
2217
- entryDir,
2218
- config,
2219
- });
2220
- /**
2221
- * 打包
2222
- */
2223
- await makePkgs({
2224
- config,
2225
- gameEntry: entryDir,
2226
- gameOutput: outputDir,
2227
- });
2228
- if (build === null || build === void 0 ? void 0 : build.enableOdr) {
2229
- /**
2230
- * 等待文件全部读写完成后
2231
- */
2232
- await makeOdrPkgs(outputDir);
2233
- /**
2234
- * 分拆 odr 包
2235
- */
2236
- }
2237
- logger.info(`pack end:${Date.now() - startTime}ms`);
2238
- }
2239
- async function buildPlugin(originConfig) {
2240
- const { entry: entryDir, output: outputDir, build } = originConfig;
2241
- let startTime = Date.now();
2242
- logger.init(outputDir, true);
2243
- logger.info(`TTMG_PACK_VERSION: ${"0.3.4"}`);
2244
- logger.info(`pack start, startTime:${startTime}`);
2143
+ await checkPkgs(config);
2245
2144
  /**
2246
2145
  * 打包
2247
2146
  */
2248
- await makePlugin({
2249
- config: originConfig,
2250
- gameEntry: entryDir,
2251
- gameOutput: outputDir,
2252
- });
2147
+ await makePkgs(config);
2253
2148
  if (build === null || build === void 0 ? void 0 : build.enableOdr) {
2254
2149
  /**
2255
2150
  * 等待文件全部读写完成后