From 3d36cbfcf7d899e0eff3bfc3ac4b1a71b4d67d87 Mon Sep 17 00:00:00 2001 From: fanxuehan <fanxuehan@qq.com> Date: Thu, 24 Mar 2022 15:25:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9E=84=E5=BB=BA=E6=97=B6=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E6=89=80=E6=9C=89=E7=9A=84uuid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/buildCocos.js | 201 ++++++++++++++++++++++++++-------------------- 1 file changed, 115 insertions(+), 86 deletions(-) diff --git a/bin/buildCocos.js b/bin/buildCocos.js index 475a164..3f71b81 100644 --- a/bin/buildCocos.js +++ b/bin/buildCocos.js @@ -1,9 +1,9 @@ -const { spawn } = require("child_process"); -const fs = require("fs"); -const compressing = require('compressing'); -const { v4, parse } = require('uuid'); -const { Base64 } = require('js-base64'); -const { copyDir, removeDir, fix2 } = require("./utils"); +const { spawn } = require("child_process"); +const fs = require("fs"); +const compressing = require('compressing'); +const { v4, parse } = require('uuid'); +const { Base64 } = require('js-base64'); +const { copyDir, removeDir, fix2 } = require("./utils"); async function buildForm() { const paths = fs.readdirSync('form'); @@ -128,10 +128,10 @@ async function buildWebBundle() { await buildCocos(args); } -function createConfigFile (projectName, type) { +function createConfigFile(projectName, type) { let iosVersion = ""; let androidVersion = ""; - if(!type){ + if (!type) { const androidPaths = fs.readdirSync(`dist/android/${projectName}`); const androidConfigFileName = androidPaths.find(path => path.indexOf('config') == 0); androidVersion = androidConfigFileName.split('.')[1]; @@ -139,17 +139,17 @@ function createConfigFile (projectName, type) { const iosConfigFileName = iosPaths.find(path => path.indexOf('config') == 0); iosVersion = iosConfigFileName.split('.')[1]; } else { - if(type=="android"){ + if (type == "android") { const androidPaths = fs.readdirSync(`dist/android/${projectName}`); const androidConfigFileName = androidPaths.find(path => path.indexOf('config') == 0); androidVersion = androidConfigFileName.split('.')[1]; - }else{ + } else { const iosPaths = fs.readdirSync(`dist/ios/${projectName}`); const iosConfigFileName = iosPaths.find(path => path.indexOf('config') == 0); iosVersion = iosConfigFileName.split('.')[1]; } } - + const config = { "ios": { "sceneName": projectName, @@ -164,7 +164,7 @@ function createConfigFile (projectName, type) { fs.writeFileSync('dist/config.json', JSON.stringify(config)); } -function compressAll (projectName) { +function compressAll(projectName) { const tarStream = new compressing.zip.Stream(); tarStream.addEntry('dist/play'); tarStream.addEntry('dist/form'); @@ -176,7 +176,7 @@ function compressAll (projectName) { tarStream.pipe(destStream); } -function build_check () { +function build_check() { const dirNames = process.cwd().split(/\/|\\/); const projectName = dirNames[dirNames.length - 1]; const path = 'assets' @@ -211,58 +211,22 @@ function build_check () { return projectName; } -function changeSettingToWebDesktop () { +function changeSettingToWebDesktop() { const path = 'assets' const folderName = getFolderName(path); editFolderMeta(path, folderName, false); } -function changeSettingsToBundle () { +function changeSettingsToBundle() { const path = 'assets' const folderName = getFolderName(path); editFolderMeta(path, folderName, true); } -function replaceUuids () { +async function replaceUuids() { console.log('build_step_0 开始~ï¼'); - const path = 'assets' - function getFolderName(path) { - let folderName = ''; - fs.readdirSync(path).find(fileName => { - const st = fs.statSync(`${path}/${fileName}`); - if (st.isDirectory()) { - folderName = fileName; - } - }); - return folderName; - } - const folderName = getFolderName(path); - - let oldFireUuid = ''; - let oldJsUuid = ''; - let oldJsShortUuid = ''; - let oldJsId = ''; - const fireMetaStr = fs.readFileSync(`assets/${folderName}/scene/${folderName}.fire.meta`); - if (fireMetaStr.indexOf('57ea7c61-9b8b-498a-b024-c98ee9124beb') > 0) { - // è€Cocos脚手架 - oldFireUuid = '57ea7c61-9b8b-498a-b024-c98ee9124beb'; - oldJsUuid = 'f4ede462-f8d7-4069-ba80-915611c058ca'; - oldJsShortUuid = 'f4edeRi+NdAabqAkVYRwFjK'; - oldJsId = 'e687yyoRBIzZAOVRL8Sseh'; - } - if (fireMetaStr.indexOf('0737ce42-24f0-45c6-8e1a-8bdab4f74ba3') > 0) { - // æ–°Cocos脚手架 - oldFireUuid = '0737ce42-24f0-45c6-8e1a-8bdab4f74ba3'; - oldJsUuid = '408a67f8-65fa-4cf1-8cf2-83e20e1a0fd5'; - oldJsShortUuid = '408a6f4ZfpM8Yzyg+IOGg/V'; - oldJsId = 'eaTVUpqahPfZeO9+sUI7RP'; - } - if (oldFireUuid === '') { - return; - } - function editFolderMeta(path, folderName) { const metaPath = `${path}/${folderName}.meta`; const metaDataStr = fs.readFileSync(metaPath); @@ -274,7 +238,6 @@ function replaceUuids () { if (!fs.existsSync(path)) { return; } - const fileStr = fs.readFileSync(path); const newFileStr = fileStr.toString().replace(new RegExp(replaceStr.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), 'g'), newStr); fs.writeFileSync(path, newFileStr); @@ -284,26 +247,92 @@ function replaceUuids () { return uuid.substring(0, 5) + Base64.fromUint8Array(bytes).substring(2); } - editFolderMeta(path, folderName); + const path = 'assets' + function getFolderName(path) { + let folderName = ''; + fs.readdirSync(path).find(fileName => { + const st = fs.statSync(`${path}/${fileName}`); + if (st.isDirectory()) { + folderName = fileName; + } + }); + return folderName; + } - const newFireUuid = v4(); - fileReplace(`assets/${folderName}/scene/${folderName}.fire.meta`, oldFireUuid, newFireUuid); - fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldFireUuid, newFireUuid); - fileReplace('settings/builder.json', oldFireUuid, newFireUuid); + async function fileForEach(src, func) { + //读å–目录 + const st = fs.statSync(src); + if (st.isFile()) { + await func(src); + return; + } + const paths = fs.readdirSync(src); + for (let i = 0; i < paths.length; i++) { + let path = paths[i]; + const newSrc = `${src}/${path}`; + const st = fs.statSync(newSrc); + if (st.isFile()) { + await func(newSrc); + } else if (st.isDirectory()) { + await fileForEach(newSrc, func); + } + } + } - const newJsUuid = v4(); - const newJsShortUuid = getShortUuid(newJsUuid); - const newJsId = v4().replace(/-/g, '').substring(0, oldJsId.length); - fileReplace(`assets/${folderName}/scene/${folderName}.ts.meta`, oldJsUuid, newJsUuid); - fileReplace(`assets/${folderName}/scene/${folderName}.js.meta`, oldJsUuid, newJsUuid); - fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldFireUuid, newFireUuid); - fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldJsShortUuid, newJsShortUuid); - fileReplace(`assets/${folderName}/scene/${folderName}.fire`, oldJsId, newJsId); + function createUuidData(uuid) { + const shortUuid = getShortUuid(uuid); + const newUuid = v4(); + const newShortUuid = getShortUuid(newUuid); + return { + oldUuid: uuid, + oldShortUuid: shortUuid, + newUuid: newUuid, + newShortUuid: newShortUuid, + }; + } + + const uuidList = []; + await fileForEach(path, (path) => { + const nameList = path.split('.'); + if (nameList[nameList.length - 1] == 'meta') { + const data = JSON.parse(fs.readFileSync(path)); + uuidList.push(createUuidData(data.uuid)); + if (data.subMetas) { + for (const key in data.subMetas) { + const subMet = data.subMetas[key]; + if (subMet.uuid) { + uuidList.push(createUuidData(subMet.uuid)); + } + } + } + } + }); + const pathList = [path, 'settings', 'project.json']; + + for (let i = 0; i < pathList.length; i++) { + const path = pathList[i]; + await fileForEach(path, (path) => { + const nameList = path.split('.'); + const expectNameList = ['png', 'jpg', 'mp3', 'wav']; + if (expectNameList.includes(nameList[nameList.length - 1])) { + return; + } + const data = fs.readFileSync(path); + uuidList.forEach(uuiddata => { + if (data.includes(uuiddata.oldUuid)) { + fileReplace(path, uuiddata.oldUuid, uuiddata.newUuid); + } + if (data.includes(uuiddata.oldShortUuid)) { + fileReplace(path, uuiddata.oldShortUuid, uuiddata.newShortUuid); + } + }); + }); + } console.log('build_step_0 完æˆ~ï¼'); } -function replaceIndexHtml () { +function replaceIndexHtml() { const data = fs.readFileSync('index.html'); fs.writeFileSync('dist/play/index.html', data); } @@ -313,52 +342,52 @@ module.exports = { build: async function () { const startTime = new Date().getTime(); - + // æž„å»ºå‰æ£€æŸ¥ const projectName = build_check(); - + // æ¸…ç†æ—§æ–‡ä»¶ - + // 构建form await removeDir('dist/form'); await buildForm(); - + // 替æ¢uuid - replaceUuids(); - + await replaceUuids(); + // 改设置为éžbundle changeSettingToWebDesktop(); - + // 构建play await removeDir('dist/play'); await buildWebDesktop(); await copyDir('build/web-desktop', 'dist/play'); replaceIndexHtml(); console.log('构建 web desktop æˆåŠŸï¼'); - + // 改设置为bundle changeSettingsToBundle(); - + await removeDir('dist/android'); await buildAndroidBundle(); await copyDir('build_android/jsb-link/remote', 'dist/android'); console.log('构建 android bundle æˆåŠŸï¼'); - + await removeDir('dist/ios'); await buildIosBundle(); await copyDir('build_ios/jsb-link/remote', 'dist/ios'); console.log('构建 ios bundle æˆåŠŸï¼'); - + await removeDir('dist/web_desktop'); await buildWebBundle(); await copyDir(`build_web_desktop/web-desktop/assets/${projectName}`, 'dist/web_desktop'); console.log('构建 web bundle æˆåŠŸï¼'); - + // 改设置为éžbundle changeSettingToWebDesktop(); - + createConfigFile(projectName); - + compressAll(projectName); await removeDir('build'); @@ -377,14 +406,14 @@ module.exports = { // æž„å»ºå‰æ£€æŸ¥ const projectName = build_check(); // 替æ¢uuid - replaceUuids(); + await replaceUuids(); // 改设置为bundle changeSettingsToBundle(); - + await removeDir('dist/android'); await buildAndroidBundle(); await copyDir('build_android/jsb-link/remote', 'dist/android'); - + // 改设置为éžbundle changeSettingToWebDesktop(); createConfigFile(projectName, "android"); @@ -397,10 +426,10 @@ module.exports = { // æž„å»ºå‰æ£€æŸ¥ const projectName = build_check(); // 替æ¢uuid - replaceUuids(); + await replaceUuids(); // 改设置为bundle changeSettingsToBundle(); - + await removeDir('dist/ios'); await buildIosBundle(); await copyDir('build_ios/jsb-link/remote', 'dist/ios'); -- 2.21.0