Laya项目中的自动构建

昨天更新了,引起脑残粉的不满,他要干货!作为一名程序媛,我只能上代码了。

篇幅有限,只能讲讲小脚本。协作开发的时代,需要便捷的工具,方便大家。

1、相关工具:SVN、GIT、LayaCmd

2、脚本运行环境:Node(可能有人会问,为什么不是Python?我就是不想用Python,你能怎样?)

3、图形界面:网页HTML

写代码之前,要梳理需求:(你都不知道要什么,你为什么要写代码?)

这个脚本最终是集成、发布。那么需要:

1、更新大家提交的素材;(存放在SVN服务器)

2、更新到家提交的代码;(存放在GIT服务器)

3、编译;(Laya命令)

4、将编译完成的工程发布到服务器。(SVN提交,然后远程同步到CDN)

关于SVN,GIT的命令行工具,请大家自行百度。Laya的命令行工具请移步 https://www.npmjs.com/package/layacmd

下面直接上代码:

1、Node环境下运行的:(build.js)

var PORT = 3000;

var http = require("http");

var url = require("url");

var fs = require("fs");

var server = http.createServer(function(request, response) {

var pathname = url.parse(request.url).pathname;

console.log(pathname);

if (pathname == "/") {

//主页面

response.writeHead(200, {

"Content-Type": "text/html;charset=UTF-8"

});

fs.createReadStream("build.html").pipe(response);

} else if (pathname == "/build") {

//更新并编译 命令

doAction("更新并编译", [ "svn up laya/", "git reset --hard", "git pull", "layacmd ui", "layacmd compile" ], response);

} else if (pathname == "/publish") {

//发布到外网 命令 提交到 svn

doAction("发布到外网", [ "svn status bin/h5/grep ! awk ''xargs svn del", "svn status bin/h5/grep ? awk ''xargs svn add", "svn commit bin/h5/ --message 'By Auto' --username lily --password lily" ], response);

} else if (pathname == "/UI") {

//layacmd ui -c -d -a

doAction("清理并导出UI", [ "layacmd ui -c -d -a" ], response);

} else if (pathname == "/log") {

//打印命令输出结果

response.writeHead(200, {

"Content-Type": "text/plain;charset=UTF-8"

});

fs.readFile("./log.txt", function(err, data) {

if (err) {

console.log("读取文件失败!" + err);

response.write(err);

} else {

console.log("读取的内容为: \n========START========\n" + data + "\n==========END==========");

response.write("

========START========

" + data + "

==========END==========");

}

response.end();

});

}

});

server.listen(PORT);

console.log("Server runing at port: " + PORT + ".");

//============执行命令============

var exec = require("child_process").exec;

function doAction(name, commands, res) {

var i = 0;

var log = "";

res.writeHead(200, {

"Content-Type": "text/html;charset=UTF-8"

});

var func = function() {

if (i >= commands.length) {

log += "" + name + " all complete!!!";

writeLog(log);

fs.createReadStream("result.html").pipe(res);

return;

}

var c = commands[i];

exec(c, function(err, stdout, stderr) {

if (err) {

log += "" + c + "

error:

" + stderr + "

--------------------

";

writeLog(log);

fs.createReadStream("result.html").pipe(res);

} else {

i++;

log += "" + c + "

out:

" + stdout + "

-----------------------

";

func();

}

});

};

func();

}

function writeLog(str) {

console.log(str);

fs.writeFileSync("./log.txt", str);

}

2、浏览器环境下运行的:(build.html)

H5游戏编译更新

运行很慢!慎用!

(result.html)

运行结束!请返回!

function loadXMLDoc()

{

var xmlhttp;

if (window.XMLHttpRequest)

{// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}

else

{// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function()

{

if (xmlhttp.readyState==4 && xmlhttp.status==200)

{

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","/log",true);

xmlhttp.send();

}

loadXMLDoc();

以上只是项目自动化的缩影,现实开发中还有许多其他的需求。关于代码有什么问题的,欢迎留言。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228G0BBRW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券