我怎样用Node.js自动完成工做的

翻译:疯狂的技术宅 原文:medium.com/dailyjs/how…前端

img

咱们在工做中常常会进行不少繁琐的任务:更新配置文件,复制和粘贴文件,更新 Jira 标签等。node

慢慢的花在这些任务上的时间会愈来愈多。我在 2016 年时在一家网络游戏公司工做时,相似的工做不少。当时我在为游戏构建可配置的模板,这项工做也许颇有价值,可是因为要从新设置皮肤,我必须把大约70%的时间消耗在制做那些游戏的副本、模板和部署等工做上。git

什么是Reskin?

公司 reskin 的定义是使用相同的游戏机制,屏幕和元素的定位,但改变了视觉美学,​​如颜色和资源等(译者吐槽:实际上就是给游戏换皮。。。)。因此像 “石头剪子布” 这样的简单游戏,咱们将建立一个有以下基本资源的模板。npm

img

可是当咱们建立一个 reskin 时,会使用不一样的资源,同时还要保证游戏仍然能够正常工做。若是你玩过像“糖果传奇” 或“疯狂的小鸟”这样的游戏,会发现它们一般会在万圣节,圣诞节或复活节发布不少风格相似的游戏。从商业角度来看这颇有意义。如今......让咱们回到实施过程。咱们的每一个游戏都共享相同的 JavaScript 文件,并加载到具备不一样内容和资源路径的 JSON 文件中。结果会怎样?json

img

实际上我和其余开发人员的时间表上已经积压了大量的任务,个人第一个想法就是“不少工做均可以进行自动化处理”。每当我建立一个新游戏时,都必须执行如下步骤:gulp

  1. 对模板存储库进行 git pull 以确保它们是最新的;
  2. 从主分支建立一个新分支 —— 由 Jira 故障单 ID 进行标识;
  3. 制做我须要构建的模板的副本;
  4. 运行 gulp;
  5. 更新 config.json 文件中的内容。这将涉及资源路径,标题以及服务请求的数据;
  6. 在本地进行构建,并检查与相关人员的 word 文档匹配的内容。 是的,我知道;
  7. 与设计师确认他们是否对外观满意;
  8. 合并到主分支并继续处理下一个分支;
  9. 更新 Jira 标签的状态,并为相关人员发表评论;
  10. 清盘并重复。

img

相比较而言,这比单纯的开发工做多了许多管理上的事情。我之前曾经接触过 Bash 脚本,并经过它来建立一些脚本以减小工做量。其中一个脚本更新了模板并建立了一个新分支,另外一个脚本则执行提交并将项目合并到演示和生产环境。bash

一般手动设置项目须要三到十分钟,部署可能须要五到十分钟。可是根据游戏的复杂程度,也可能须要十分钟到半天。尽管脚本能有所帮助,但仍须要大量的时间用于更新内容或追查丢失的信息。网络

img

经过编写代码来缩短期是远远不够的。咱们还须要思考优化工做流程的好方法,以即可以更多地去依赖脚本。好比将内容从 word 文档中移出,并转移到 Jira 标签中,再将其分解为相关的自定义字段。设计人员不是发送公共驱动器上资源所在位置的连接,而是去设置一个内容交付网络(CDN)存储库,其中包含对资源的暂存和发布到生产环境的 URL。curl

Jira API

这些事情可能须要一段时间才能实施,但咱们的流程确实会随着时间的推移而获得改善。我对咱们的项目管理工具 Jira 的 API 进行了一些研究,并对正在处理的 Jira 标记作了一些请求,获得了大量有价值的数据,因此我决定将这些请求集成到了本身的 Bash 脚本中,以便可以从 Jira 标记中读到值,并在完成后发布评论和通知相关人员。工具

从 Bash 过渡到 Node

Bash 脚本很好,但若是有人在 Windows 机器上工做,它们就没法运行了。在作了一些挖掘以后,我决定用 JavaScript 将整个过程包装成一个定制的构建工具。我给这个工具取名为Mason,它将会改变一切。

CLI

当你在终端中使用 Git 时(我假设你在这样作),会发现它有一个很是友好的命令行界面。若是你拼写错误或输入错误的命令,它会友好地对其认为你想要输入的内容提出建议。一个名为 commander的库应可以提供相同的功能,它是我使用的众多库之一。

请参考下面这个简化的代码示例。它正在对命令行界面(CLI)程序进行引导。

src/mason.js

使用 npm,你能够从 package.json 运行一个连接,它将会建立一个全局别名。

npm link
复制代码

它将为我提供一个能够调用的命令,被称为 mason。因此每当我在终端中调用 mason 时,它将运行 mason.js 脚本。全部任务都属于一个名为 mason 的综合命令,我天天都用它来构建游戏,节省的时间真的是......使人难以置信。

你能够在下面看到:我将 Jira 标签编号做为参数传给命令。这将会使用 curl 去请求 Jira API ,并获取更新游戏所需的全部信息。而后它将继续构建和部署项目。最后我会发表评论并标记相关人员和设计师,让他们知道工做已经完成。

$ mason create GS-234
... calling Jira API 
... OK! got values!
... creating a new branch from master called 'GS-234'
... updating templates repository
... copying from template 'pick-from-three'
... injecting values into config JSON
... building project
... deploying game
... Perfect! Here is the live link 
http://www.fake-studio.com/game/fire-water-earth
... Posted comment 'Hey [~ben.smith], this has been released. Does the design look okay? [~jamie.lane]' on Jira.
复制代码

依靠这些咱们就完成了关键的步骤!我对整个项目感到很是满意。

欢迎关注公众号:前端先锋,获取更多前端干货。

相关文章
相关标签/搜索