127 lines
6.5 KiB
TypeScript
127 lines
6.5 KiB
TypeScript
import * as fs from 'fs';
|
||
import * as path from 'path';
|
||
export class VivogamePlugin implements plugins.Command {
|
||
jsFileList: any = []
|
||
constructor() {
|
||
}
|
||
async onFile(file: plugins.File) {
|
||
if (file.extname == '.js') {
|
||
const filename = file.origin;
|
||
|
||
if (filename == "libs/modules/promise/promise.js" || filename == 'libs/modules/promise/promise.min.js') {
|
||
return null;
|
||
}
|
||
this.jsFileList.push(file.basename)
|
||
if (filename == 'libs/modules/egret/egret.js' || filename == 'libs/modules/egret/egret.min.js') {
|
||
let content = file.contents.toString();
|
||
content += `;window.egret = egret;`;
|
||
content = content.replace(/definition = __global/, "definition = window");
|
||
file.contents = new Buffer(content);
|
||
}
|
||
else {
|
||
let content = file.contents.toString();
|
||
if (
|
||
filename == "libs/modules/res/res.js" ||
|
||
filename == 'libs/modules/res/res.min.js' ||
|
||
filename == 'libs/modules/assetsmanager/assetsmanager.min.js' ||
|
||
filename == 'libs/modules/assetsmanager/assetsmanager.js'
|
||
) {
|
||
content += ";window.RES = RES;"
|
||
}
|
||
if (filename == "libs/modules/eui/eui.js" || filename == 'libs/modules/eui/eui.min.js') {
|
||
content += ";window.eui = eui;"
|
||
if (filename == "libs/modules/eui/eui.js") {
|
||
content = content.replace("function getRepeatedIds", "window.getRepeatedIds=function getRepeatedIds");
|
||
content = content.replace("function getIds", "window.getIds=function getIds");
|
||
content = content.replace("function toXMLString", "window.toXMLString=function toXMLString");
|
||
content = content.replace("function checkDeclarations", "window.checkDeclarations=function checkDeclarations");
|
||
content = content.replace("function getPropertyStr", "window.getPropertyStr=function getPropertyStr");
|
||
}
|
||
}
|
||
if (filename == 'libs/modules/dragonBones/dragonBones.js' || filename == 'libs/modules/dragonBones/dragonBones.min.js') {
|
||
content += ';window.dragonBones = dragonBones';
|
||
}
|
||
content = "var egret = window.egret;" + content;
|
||
|
||
if (filename == 'main.js') {
|
||
content += "\n;window.Main = Main;"
|
||
}
|
||
file.contents = new Buffer(content);
|
||
}
|
||
}
|
||
return file;
|
||
}
|
||
async onFinish(pluginContext: plugins.CommandContext) {
|
||
//同步 index.html 配置到 game.js
|
||
const gameJSPath = path.join(pluginContext.outputDir, "game.js");
|
||
if (!fs.existsSync(gameJSPath)) {
|
||
console.log(`${gameJSPath}不存在,请先使用 Launcher 发布 Vivo 小游戏`);
|
||
return;
|
||
}
|
||
let gameJSContent = fs.readFileSync(gameJSPath, { encoding: "utf8" });
|
||
const projectConfig = pluginContext.buildConfig.projectConfig;
|
||
const optionStr =
|
||
`entryClassName: ${projectConfig.entryClassName},\n\t\t` +
|
||
`orientation: ${projectConfig.orientation},\n\t\t` +
|
||
`frameRate: ${projectConfig.frameRate},\n\t\t` +
|
||
`scaleMode: ${projectConfig.scaleMode},\n\t\t` +
|
||
`contentWidth: ${projectConfig.contentWidth},\n\t\t` +
|
||
`contentHeight: ${projectConfig.contentHeight},\n\t\t` +
|
||
`showFPS: ${projectConfig.showFPS},\n\t\t` +
|
||
`fpsStyles: ${projectConfig.fpsStyles},\n\t\t` +
|
||
`showLog: ${projectConfig.showLog},\n\t\t` +
|
||
`maxTouches: ${projectConfig.maxTouches},`;
|
||
const reg = /\/\/----auto option start----[\s\S]*\/\/----auto option end----/;
|
||
const replaceStr = '\/\/----auto option start----\n\t\t' + optionStr + '\n\t\t\/\/----auto option end----';
|
||
gameJSContent = gameJSContent.replace(reg, replaceStr);
|
||
fs.writeFileSync(gameJSPath, gameJSContent);
|
||
|
||
//修改横竖屏
|
||
let orientation;
|
||
if (projectConfig.orientation == '"landscape"') {
|
||
orientation = "landscape";
|
||
}
|
||
else {
|
||
orientation = "portrait";
|
||
}
|
||
const gameJSONPath = path.join(pluginContext.outputDir, "manifest.json");
|
||
let gameJSONContent = JSON.parse(fs.readFileSync(gameJSONPath, { encoding: "utf8" }));
|
||
gameJSONContent.deviceOrientation = orientation;
|
||
let engineVersion = this.readData(path.join(pluginContext.projectRoot, "egretProperties.json")).engineVersion
|
||
if(!gameJSONContent.thirdEngine)gameJSONContent.thirdEngine={}
|
||
gameJSONContent.thirdEngine.egret = engineVersion
|
||
|
||
fs.writeFileSync(gameJSONPath, JSON.stringify(gameJSONContent, null, "\t"));
|
||
let isPublish = pluginContext.buildConfig.command == "publish" ? true : false;
|
||
let configArr: any[] = []
|
||
for (var i = 0, len = this.jsFileList.length; i < len; i++) {
|
||
let jsFile = this.jsFileList[i];
|
||
if (isPublish) {
|
||
if (jsFile == "main.js") {
|
||
jsFile = 'main.min.js'
|
||
} else if (jsFile == "default.thm.js") {
|
||
jsFile = "default.thm.min.js"
|
||
}
|
||
}
|
||
configArr.push(JSON.stringify({
|
||
module_name: `./js/${jsFile}`,
|
||
module_path: `./js/${jsFile}`,
|
||
module_from: `engine/js/${jsFile}`,
|
||
}, null, "\t"))
|
||
}
|
||
const replaceConfigStr = '\/\/----auto option start----\n\t\t' + configArr.toString() + '\n\t\t\/\/----auto option end----';
|
||
const minigameConfigPath = path.join(pluginContext.outputDir,"../", "minigame.config.js");
|
||
if(!fs.existsSync(minigameConfigPath)){
|
||
//5.2.28版本,vivo更新了项目结构,老项目需要升级
|
||
fs.writeFileSync(path.join(pluginContext.outputDir,"../","vivo更新了项目结构,请重新创建vivo小游戏项目.js"), "vivo更新了项目结构,请重新创建vivo小游戏项目");
|
||
}else{
|
||
let configJSContent = fs.readFileSync(minigameConfigPath, { encoding: "utf8" });
|
||
configJSContent = configJSContent.replace(reg, replaceConfigStr);
|
||
fs.writeFileSync(minigameConfigPath, configJSContent);
|
||
}
|
||
}
|
||
readData(filePath: string): any {
|
||
return JSON.parse(fs.readFileSync(filePath, { encoding: "utf8" }));
|
||
}
|
||
}
|