main.js 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. 'use strict'
  2. //const { dir } = require('console')
  3. const fs = require('fs')
  4. const path = require('path')
  5. module.exports = {
  6. load() {
  7. //当package被正确加载的时候执行
  8. Editor.log('package load')
  9. },
  10. unload() {
  11. //当package被正确卸载的时候执行
  12. Editor.log('package unload')
  13. },
  14. messages: {
  15. async generateMeta() {
  16. await buildAllABs()
  17. async function buildAllABs() {
  18. Editor.log('构建所有ab包')
  19. try {
  20. let isNativeRemote = false
  21. // let isMiniGameRemote = true
  22. let isMiniGameRemote = true
  23. // buildAB('mainpackage/Data', isNativeRemote, isMiniGameRemote)
  24. // buildAB('mainpackage/mainscene', isNativeRemote, isMiniGameRemote)
  25. // await buildABs('mainpackage/UI', isNativeRemote, isMiniGameRemote, 9)
  26. await buildABs('remote/UI', isNativeRemote, isMiniGameRemote, 9)
  27. // await buildABs('remote/resource', isNativeRemote, isMiniGameRemote, 9)
  28. } catch (e) {
  29. Editor.log('构建所有ab包,失败[%s]', e.message)
  30. return
  31. }
  32. Editor.log('构建所有ab包,成功')
  33. }
  34. },
  35. start() {
  36. Editor.log('开始生成assetsbundle meta文件')
  37. generateDir('remote', false)
  38. generateDir('mainpackage', false)
  39. Editor.assetdb.refresh('db://assets/remote/', function (err, results) {})
  40. Editor.assetdb.refresh('db://assets/mainpackage/', function (err, results) {})
  41. function generateDir(dirName, isRemote = true) {
  42. var rootDir = path.join(path.resolve(__dirname, '../..'), 'assets', dirName)
  43. // var eftBattleDir = path.join(rootDir, 'effect', 'battle')
  44. // readDirSync(eftBattleDir, isRemote)
  45. // var eftUIDir = path.join(rootDir, 'effect', 'ui')
  46. // readDirSync(eftUIDir, isRemote)
  47. // var spineDir = path.join(rootDir, 'Spine')
  48. // readDirSync(spineDir, isRemote)
  49. // var uiDir = path.join(rootDir, 'UI')
  50. // readDirSync(uiDir, isRemote)
  51. }
  52. function readDirSync(dir, isRemote = true) {
  53. var stat = fs.statSync(dir)
  54. if (!stat.isDirectory()) {
  55. return
  56. } else {
  57. var subpaths = fs.readdirSync(dir)
  58. Editor.log('开始处理:', dir)
  59. for (var i = 0; i < subpaths.length; i++) {
  60. var subpath = path.join(dir, subpaths[i])
  61. stat = fs.statSync(subpath)
  62. var extensionName = path.extname(subpath).toLowerCase()
  63. if (stat.isFile() && extensionName === '.meta') {
  64. Editor.log(subpath)
  65. var metaData = fs.readFileSync(subpath)
  66. var data = JSON.parse(metaData)
  67. // let metaData=await AssetDB.getMe
  68. data.isBundle = true
  69. data.isRemoteBundle = {
  70. // android: isRemote,
  71. // ios: isRemote,
  72. wechatgame: false,
  73. }
  74. data.inlineSpriteFrames = {
  75. // android: false,
  76. // ios: false,
  77. wechatgame: false,
  78. }
  79. data.compressionType = {
  80. // android: 'default',
  81. // ios: 'default',
  82. wechatgame: 'merge_all_json',
  83. }
  84. data.optimizeHotUpdate = {
  85. // android: false,
  86. // ios: false,
  87. wechatgame: false,
  88. }
  89. var dataJson = JSON.stringify(data, null, 2)
  90. fs.writeFileSync(subpath, dataJson)
  91. }
  92. }
  93. }
  94. }
  95. },
  96. },
  97. }
  98. function buildAB(result, isNativeRemote, isMiniGameRemote, pp) {
  99. Editor.log('构建ab包[%s],[%d]', result.url, pp)
  100. let uuid = result.uuid
  101. let metaData = Editor.assetdb.loadMetaByUuid(uuid)
  102. let metaJsonData = {
  103. ver: metaData.ver,
  104. uuid: metaData.uuid,
  105. isBundle: true,
  106. bundleName: cc.path.basename(result.url), //path.posix.relative('db://assets/', result.url),
  107. priority: pp,
  108. subMetas: metaData.subMetas,
  109. }
  110. metaJsonData.isRemoteBundle = {
  111. android: isNativeRemote,
  112. ios: isNativeRemote,
  113. wechatgame: isMiniGameRemote,
  114. }
  115. metaJsonData.inlineSpriteFrames = {
  116. android: false,
  117. ios: false,
  118. wechatgame: false,
  119. }
  120. metaJsonData.compressionType = {
  121. // android: 'merge_all_json',
  122. // ios: 'merge_all_json',
  123. // 'web-mobile': 'merge_all_json',
  124. // 'web-desktop': 'merge_all_json',
  125. wechatgame: 'merge_all_json',
  126. }
  127. metaJsonData.optimizeHotUpdate = {
  128. android: false,
  129. ios: false,
  130. wechatgame: false,
  131. }
  132. let metaJson = JSON.stringify(metaJsonData, null, 2)
  133. Editor.assetdb.saveMeta(metaData.uuid, metaJson)
  134. Editor.log('构建ab包[%s],成功[%d]', result.url, pp)
  135. }
  136. async function buildABs(dir, isNativeRemote, isMiniGameRemote, pp) {
  137. return new Promise((resolve, reject) => {
  138. let url = 'db://assets/' + dir + '/*'
  139. Editor.log('构建ab包,目录[%s]', url, pp)
  140. Editor.assetdb.queryAssets(url, 'folder', async (err, results) => {
  141. if (err) {
  142. Editor.error(err)
  143. reject(err)
  144. }
  145. for (let i = 0; i < results.length; i++) {
  146. buildAB(results[i], isNativeRemote, isMiniGameRemote, pp)
  147. }
  148. resolve('')
  149. })
  150. })
  151. }