import * as fs from "fs"; import * as path from "path"; import do_task from "./single-html/build.js"; import { createDist } from "./common/utils.js"; // 处理 HTML 渠道 async function processHtmlChannels(options) { const outputPrefix = options.outputPrefix || ""; const htmlChannel = options.htmlChannel || [ "applovin", "unity", "appier", "ironsource", "mintegral", "moloco", ]; for (const channelName of htmlChannel) { // 遍历 networks 目录下的所有js文件,获取 文件名 然后删除 web-mobile 目录下的同名文件 const files = fs.readdirSync(path.join("networks")); for (const file of files) { if (file.endsWith(".js")) { const destinationFile = path.join("web-mobile", file); if (fs.existsSync(destinationFile)) { fs.unlinkSync(destinationFile); console.log(`已删除: ${destinationFile}`); } } } // tiktok 处理 const tiktokConfig = path.join("web-mobile", `config.json`); if (fs.existsSync(tiktokConfig)) { fs.unlinkSync(tiktokConfig); } const tiktokJs = path.join("web-mobile", `tiktok.js`); if (fs.existsSync(tiktokJs)) { fs.unlinkSync(tiktokJs); } // 从 networks 找到复制到 web-mobile 中 if (["applovin", "unity", "appier", "ironsource"].includes(channelName)) { const mraidSupportFile = path.join("networks", "mraid_support.js"); const mraidDestinationFile = path.join("web-mobile", "mraid_support.js"); if (fs.existsSync(mraidSupportFile)) { fs.copyFileSync(mraidSupportFile, mraidDestinationFile); console.log(`已复制: ${mraidSupportFile} 到 ${mraidDestinationFile}`); } } else if (["mintegral", "moloco"].includes(channelName)) { const fileName = `${channelName}.js`; const sourceFile = path.join("networks", fileName); const destFile = path.join("web-mobile", fileName); if (fs.existsSync(sourceFile)) { fs.copyFileSync(sourceFile, destFile); console.log(`已复制: ${sourceFile} 到 ${destFile}`); } } if (["facebook", "google", "tiktok"].includes(channelName)) { if (channelName == "tiktok") { fs.copyFileSync( path.join("facebook/config.json"), path.join("web-mobile", `config.json`) ); fs.copyFileSync( path.join("tiktok/tiktok.js"), path.join("web-mobile", `tiktok.js`) ); } else { const sourceFile = path.join("networks", `${channelName}.js`); const destinationFile = path.join("web-mobile", `${channelName}.js`); console.log("------------------------", sourceFile); if (fs.existsSync(sourceFile)) { fs.copyFileSync(sourceFile, destinationFile); console.log(`已复制: ${sourceFile} 到 ${destinationFile}`); } } } const htmlFilePath = path.join("web-mobile", "index.html"); // 读取 index.html 文件 let htmlContent = fs.readFileSync(htmlFilePath, "utf-8"); // 移除非当前渠道包的 \\n`, "g" ); htmlContent = htmlContent.replace(scriptRegex, ""); } }); // 移除 mraid_support.js 和 mraid.js 的 \n`; } else { // @TODO if (!channelName == "facebook") { channelScriptTag = ` \n`; } } if (!htmlContent.includes(channelScriptTag)) { htmlContent = htmlContent.replace( /<\/head>/, `${channelScriptTag}` ); } // 替换包含 window.vConsole = new VConsole 的 \n`; htmlContent = htmlContent.replace(vConsoleScriptRegex, cocosScriptTag); // 额外引入 loader-and-starter.js 和 asset-map.js 到 body 中 const loaderScriptTag = `\n`; const assetMapScriptTag = `\n`; const bodyScriptTags = `${cocosScriptTag}${loaderScriptTag}${assetMapScriptTag}`; if ( !htmlContent.includes(cocosScriptTag) && !htmlContent.includes(assetMapScriptTag) ) { htmlContent = htmlContent.replace(cocosScriptTag, bodyScriptTags); } // 移除单渠道的 SDK script 标签 if (!["tiktok", "facebook", "google"].includes(channelName)) { const sdkScriptTag = `\n`; htmlContent = htmlContent.replace(sdkScriptTag, ""); } fs.writeFileSync(htmlFilePath, htmlContent); console.log(`已将 ${channelName}.js 和相关 script 引入到 index.html 中`); // 调用 do_task 方法,将 web-mobile 下的所有包打包成一个 HTML createDist(); do_task(); // 如果是 ironsource 渠道,将 插入到 body 标签之前 if (channelName === "ironsource") { htmlContent = fs.readFileSync(path.join("dist", "index.html"), "utf-8"); htmlContent = htmlContent.replace( /<\/body>/, `` ); fs.writeFileSync(path.join("dist", "index.html"), htmlContent); console.log( `已将 写入到 ironsource.html 的 body 标签之前` ); } // 重命名生成的 index.html 为对应的渠道名称 const distIndexPath = path.join("dist", "index.html"); const channelIndexPath = path.join( "dist", `${outputPrefix}${channelName}.html` ); if (fs.existsSync(distIndexPath)) { fs.renameSync(distIndexPath, channelIndexPath); console.log(`已重命名 index.html 为 ${channelName}.html`); } } } export default processHtmlChannels;