Working on加工塔防守很明显,代码变得太大,无法保留在一个文件中。当然,计算机不认为它特别大,但它开始让发现事情真的很难,特别是因为我们使用文本编辑器(我使用Emacs,Peter使用TextMate)而不是IDE。
彼得通过将单片PTD.js分为五个或六个文件来容易解决问题,但在这样做的新问题中出现了一个新的问题:如何在部署游戏时再次将Humpty Dumpty放在一起?
Fortunately, Python andBeautifulSoup来到我的救援,使可以将一个简单但强大的部署脚本放在一起。首先,我添加了一个包含所有加载的javascript文件的div,这看起来像这样:
然后它在一起合并它们:
fromBeautifulSoup进口BeautifulSouphtml=打开('ptd.html'那'r')soup=BeautifulSoup(html。read())html。关闭()merged_js.=打开('deploy / ptd.js'那'W')标签=soup。找到所有(“脚本”)为了tag在标签:如果tag。has_key.('src'):src_file=打开(tag['src'],'r')merged_js.。写(src_file。read())src_file。关闭()merged_js.。关闭()
这找到所有从BeautifulSoup便于定位方法all the脚本
ptd.html中的标签。然后我们迭代并将任何导入的脚本文件的内容延期到新的merged_js.
我们正在创建的文件。
从我们的预定计划中断。
我们可以使用Python列表的扫描来重写此循环,以便对我们的代码进行更简洁令人愉悦的感觉。
def合并(文件):src=打开(文件那'r')merged_js.。写(src。read())src。关闭()[合并(tag['src'])为了tag如果tag。has_key.('src')
If we weren't good programmers who close files they open we could compress this into a single line:
[merged_js.。写(打开(tag['src'],'r')。read())为了tag如果tag。has_key.('src')
不幸的是,我们是一个有思想的程序员,他们在不关闭他们的情况下不打开文件。无论如何,我认为它通常是一个有趣的且偶尔有价值的运动,以考虑重写您的循环,列表旨在记住语法并欣赏他们的安静密度。
回到我们所在的地方......
好的,所以我们刚刚将导入的JavaScript文件合并到一个文件中。现在我们想要更换整个js_imports.
div与新合并文件的单一导入。这也很容易。
fromBeautifulSoup进口BeautifulSoup那Tag#html是一个包含原始HTML的字符串soup=BeautifulSoup(html)js_imports_div.=soup。find(ID=“js_imports”)merged_src.=Tag(soup那“脚本”)merged_src.[“src"]=u"ptd.js"merged_src.[“charset”]=“utf-8"merged_src.[“type"]=“文字/ javascript”js_imports_div.。用。。。来代替(merged_src.)
我们只是搜索汤js_imports.
,然后使用用。。。来代替
插入新的方法Tag
我们创造的。与此,我们已经修复了我们的HTML文件并合并了我们的JavaScript文件,但仍有一些东西要整理。
First, we need to write our fixed up html to file:
deploy_html.=打开('deploy / ptd.html'那'W')deploy_html.。写(str.(soup)))deploy_html.。关闭()
这结果很容易。之后我们有一个最后一步,可以缩小JavaScript文件以节省空间。
fromjsmin.进口jsmin.merged_js.=打开('deploy / ptd.js'那'r')JS.=merged_js.。read()merged_js.。关闭()Cinied_JS.=打开('deploy/ptd.js, 'W.')Cinied_JS.。写(jsmin.(JS.)))Cinied_JS.。关闭()
这将缩小部署/ ptd.js.
文件,为我们保存一点空间。它可能会向后留下缩小整个文件,而不是在将它们合并进入的情况下缩小碎片merged_js.
文件,但在我的经验中,用部分合并它们可以很容易地导致代码被打破。
既然,处理了部署脚本的相对复杂的方面,则使用简单的shell脚本轻松完成其他所有内容。你的shell脚本可能最终看起来像这样:
回声“开始部署脚本......”rm -rf deploy/*回声“合并和缩小JavaScript进口......”python脚本/ build.py回声“Copying files..."CP -R资产部署/资产/ CP许可证部署/许可证回声“Deploy script completed! Files are in deploy/"
Since remembering the ease of html manipulation with BeautifulSoup, I've been on something of a craze while converting all of static webpages to use simple build scripts along these lines. For example,ptdef.com通过在第一个PTD部署脚本的结果上运行第二部署脚本来生成,该脚本一旦提取内联的javascript并将其注入ptdef.com模板,以及内容game
分配。
此外,我非常简单的个人网站willasson.com.是一个简单的HTML模板,它具有一些呈现的一些标记内容,然后注入它以生成已部署的版本。那个构建脚本是一个懒惰的二十四行。它足够短暂,以简单地看作一个快速的睡衣:
进口啰嗦fromBeautifulSoup进口BeautifulSoupdefmain():main_file.=打开(“main.md”那'r')main_md.=main_file.。read()main_file.。关闭()main_html.=啰嗦。啰嗦(main_md.)index_file.=打开(“在dex.html"那'r')index_html.=index_file.。read()index_file.。关闭()在dex_soup=BeautifulSoup(index_html.)main_div.=在dex_soup。find(ID=“主要的”)main_div.。用。。。来代替(main_html.)合并d_file=打开(“deploy / index.html”那'W')合并d_file。写(str.(在dex_soup)))合并d_file。关闭()
如果名称==“main“:main()
由一个简单的shell脚本管理:
回声“建立'willasson.com'......的部署副本'......”回声“删除旧文件......”rm -rf deploy/*回声“运行脚本/ build.py ...”python脚本/ build.py回声“复制媒体文件......”CP -R媒体部署/回声“完成'willasson.com'的部署副本!”
无论如何,我希望其他人可以在这里使用一些想法来通过为他们的项目和网站构建灵活性和方便的部署脚本来使他们的生活更简单。
Let me know if you have any problems or questions.