'use strict' //const { dir } = require('console') const fs = require('fs') const path = require('path') module.exports = { load() { //当package被正确加载的时候执行 Editor.log('package load') }, unload() { //当package被正确卸载的时候执行 Editor.log('package unload') }, messages: { async generateMeta() { await buildAllABs() async function buildAllABs() { Editor.log('构建所有ab包') try { let isNativeRemote = false // let isMiniGameRemote = true let isMiniGameRemote = true // buildAB('mainpackage/Data', isNativeRemote, isMiniGameRemote) // buildAB('mainpackage/mainscene', isNativeRemote, isMiniGameRemote) // await buildABs('mainpackage/UI', isNativeRemote, isMiniGameRemote, 9) await buildABs('remote/UI', isNativeRemote, isMiniGameRemote, 9) // await buildABs('remote/resource', isNativeRemote, isMiniGameRemote, 9) } catch (e) { Editor.log('构建所有ab包,失败[%s]', e.message) return } Editor.log('构建所有ab包,成功') } }, start() { Editor.log('开始生成assetsbundle meta文件') generateDir('remote', false) generateDir('mainpackage', false) Editor.assetdb.refresh('db://assets/remote/', function (err, results) {}) Editor.assetdb.refresh('db://assets/mainpackage/', function (err, results) {}) function generateDir(dirName, isRemote = true) { var rootDir = path.join(path.resolve(__dirname, '../..'), 'assets', dirName) // var eftBattleDir = path.join(rootDir, 'effect', 'battle') // readDirSync(eftBattleDir, isRemote) // var eftUIDir = path.join(rootDir, 'effect', 'ui') // readDirSync(eftUIDir, isRemote) // var spineDir = path.join(rootDir, 'Spine') // readDirSync(spineDir, isRemote) // var uiDir = path.join(rootDir, 'UI') // readDirSync(uiDir, isRemote) } function readDirSync(dir, isRemote = true) { var stat = fs.statSync(dir) if (!stat.isDirectory()) { return } else { var subpaths = fs.readdirSync(dir) Editor.log('开始处理:', dir) for (var i = 0; i < subpaths.length; i++) { var subpath = path.join(dir, subpaths[i]) stat = fs.statSync(subpath) var extensionName = path.extname(subpath).toLowerCase() if (stat.isFile() && extensionName === '.meta') { Editor.log(subpath) var metaData = fs.readFileSync(subpath) var data = JSON.parse(metaData) // let metaData=await AssetDB.getMe data.isBundle = true data.isRemoteBundle = { // android: isRemote, // ios: isRemote, wechatgame: false, } data.inlineSpriteFrames = { // android: false, // ios: false, wechatgame: false, } data.compressionType = { // android: 'default', // ios: 'default', wechatgame: 'merge_all_json', } data.optimizeHotUpdate = { // android: false, // ios: false, wechatgame: false, } var dataJson = JSON.stringify(data, null, 2) fs.writeFileSync(subpath, dataJson) } } } } }, }, } function buildAB(result, isNativeRemote, isMiniGameRemote, pp) { Editor.log('构建ab包[%s],[%d]', result.url, pp) let uuid = result.uuid let metaData = Editor.assetdb.loadMetaByUuid(uuid) let metaJsonData = { ver: metaData.ver, uuid: metaData.uuid, isBundle: true, bundleName: cc.path.basename(result.url), //path.posix.relative('db://assets/', result.url), priority: pp, subMetas: metaData.subMetas, } metaJsonData.isRemoteBundle = { android: isNativeRemote, ios: isNativeRemote, wechatgame: isMiniGameRemote, } metaJsonData.inlineSpriteFrames = { android: false, ios: false, wechatgame: false, } metaJsonData.compressionType = { // android: 'merge_all_json', // ios: 'merge_all_json', // 'web-mobile': 'merge_all_json', // 'web-desktop': 'merge_all_json', wechatgame: 'merge_all_json', } metaJsonData.optimizeHotUpdate = { android: false, ios: false, wechatgame: false, } let metaJson = JSON.stringify(metaJsonData, null, 2) Editor.assetdb.saveMeta(metaData.uuid, metaJson) Editor.log('构建ab包[%s],成功[%d]', result.url, pp) } async function buildABs(dir, isNativeRemote, isMiniGameRemote, pp) { return new Promise((resolve, reject) => { let url = 'db://assets/' + dir + '/*' Editor.log('构建ab包,目录[%s]', url, pp) Editor.assetdb.queryAssets(url, 'folder', async (err, results) => { if (err) { Editor.error(err) reject(err) } for (let i = 0; i < results.length; i++) { buildAB(results[i], isNativeRemote, isMiniGameRemote, pp) } resolve('') }) }) }