const fs = require("fs"); const path = require("path"); const archiver = require("archiver"); const zipChannel = ['facebook', 'google', 'tiktok', 'vungle', 'liftoff']; // 延时函数 function delay(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } const outputPrefix = ''; // 创建 dist 目录 if (!fs.existsSync('dist')) { fs.mkdirSync('dist'); } // 1. 将js复制到web-mobile中 async function processChannels() { for (const channelName of zipChannel) { // 遍历 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 中 const sourceFile = path.join('networks', `${channelName}.js`); const destinationFile = path.join('web-mobile', `${channelName}.js`); if (channelName === 'tiktok') { fs.copyFileSync(path.join('tiktok/config.json'), path.join('web-mobile', `config.json`)); fs.copyFileSync(path.join('tiktok/tiktok.js'), path.join('web-mobile', `tiktok.js`)); } else if (channelName === 'vungle' || channelName === 'liftoff') { // 对于 vungle 和 liftoff,使用 mraid_support.js 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 (fs.existsSync(sourceFile)) { fs.copyFileSync(sourceFile, destinationFile); console.log(`已复制: ${sourceFile} 到 ${destinationFile}`); } } const htmlFilePath = path.join('web-mobile', 'index.html'); let htmlContent = fs.readFileSync(htmlFilePath, 'utf-8'); // 移除其他渠道包的 \\n`, 'g'); htmlContent = htmlContent.replace(scriptRegex, ''); }); // 移除所有渠道的 标签 const metaTagRegex = /\n/g; htmlContent = htmlContent.replace(metaTagRegex, ''); // 检查并插入新的渠道 script 标签 let channelScriptTag; if (channelName === 'vungle' || channelName === 'liftoff') { channelScriptTag = ` \n`; } else { channelScriptTag = ` \n`; } if (!htmlContent.includes(channelScriptTag)) { htmlContent = htmlContent.replace(/<\/head>/, `${channelScriptTag}`); } // 如果是 google 渠道,添加 标签 if (channelName === 'google') { const metaTag = `\n`; if (!htmlContent.includes(metaTag)) { htmlContent = htmlContent.replace(/<\/head>/, `${metaTag}`); } } // 检查并插入新的 SDK script 标签到
之前 const sdkScriptTag = `\n`; if (!htmlContent.includes(sdkScriptTag)) { htmlContent = htmlContent.replace(/<\/body>/, `${sdkScriptTag}`); } fs.writeFileSync(htmlFilePath, htmlContent); console.log(`已将 ${channelName}.js 和 SDK script 引入到 index.html 中`); // 打包 web-mobile 目录为 zip 文件 const output = fs.createWriteStream(path.join('dist', `${outputPrefix}${channelName}.zip`)); const archive = archiver('zip', { zlib: { level: 9 } // 设置压缩级别 }); output.on('close', function() { console.log(`已创建 ${channelName}.zip,大小为 ${archive.pointer()} 字节`); }); archive.on('error', function(err) { throw err; }); archive.pipe(output); archive.directory('web-mobile/', false); await archive.finalize(); } } processChannels();