昨天更新了,引起脑残粉的不满,他要干货!作为一名程序媛,我只能上代码了。
篇幅有限,只能讲讲小脚本。协作开发的时代,需要便捷的工具,方便大家。
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();
以上只是项目自动化的缩影,现实开发中还有许多其他的需求。关于代码有什么问题的,欢迎留言。
领取专属 10元无门槛券
私享最新 技术干货