- 原文地址:How I automated my job with Node.js
- 原文做者:Shaun Michael Stone
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:geniusq1981
- 校对者:Starriers
您知道在工做中有不少必须完成的繁琐任务:更新配置文件,复制和粘贴文件,更新 Jira 任务。前端
一段时间以后,这些工做的消耗时间会逐渐累积。2016 年,我在一家网络游戏公司工做时,状况就是如此。为游戏构建可配置的模板对于游戏开发来讲是一项很是有意义的工做,但我大约 70% 的时间都花在了复制这些游戏模板和部署这些从新封装的实现上。node
公司 reskin 的定义是指使用相同的游戏机制,屏幕和元素的定位,但改变诸如色彩和素材资源之类的纯视觉美学的相关内容。所以,在像“Rock Paper Scissors”这样简单的游戏中,咱们建立一个具备以下基本素材资源的模板。android
当咱们建立一个这样的 reskin 以后,咱们就能够更换不一样的素材资源。若是你看看像 Candy Crush 或 Angry Birds 这样的游戏,你会发现它们一个游戏有不少不一样的版本。一般有对应万圣节,圣诞节或复活节的版原本区分发布。从商业角度来看,这样作很是有意义。如今...回到咱们的实现。每一个游戏都共用相同的 JavaScript 文件,但会加载包含不一样内容和资源路径的 JSON 文件。结果是?ios
我和其余开发人员天天都有一堆的工做日程表,个人第一个想法是“其实不少工做均可以实现自动化”。每当我去建立一个新游戏时,我都必须执行如下步骤:git
对我来讲,这感受更像是一种管理工做而不是实际的开发工做。我曾在之前的角色中接触过 Bash 脚本,并在此基础上建立过一些脚本,以减小所作的工做。其中一个脚本能够更新模板并建立一个新的分支,另外一个脚本执行了一个 commit 并将项目合并到开发和生产环境中。github
手动建立一个项目须要三到十分钟。部署可能须要五到十分钟。这些会根据游戏的复杂程度而不一样,有时甚至可能须要十分钟到半天。脚本会有所帮助,但仍然须要大量时间用于更新内容或追查丢失的信息。npm
只经过编写代码来缩短期是不够的。须要考虑更好的方法来处理咱们的工做流,以便我能够更好地利用这些脚本。将内容从文档中移出,将其分解为相关的自定义字段,并移入 Jira 任务。设计人员不须要再发送资源在公共服务器的连接地址,而更实际的作法是设置一个内容交付网络(CDN)存储库,其中包含资源的开发和生产的 URL。json
这样的事情可能须要运行一段时间才能获得看到效果,但咱们的流程确实会随着时间的推移而有所改善。我对咱们的项目管理工具 Jira 的 API 进行了一些研究,并对我正在处理的 Jira 任务作了一些请求。我收集了不少有价值的数据。这些数据很是有价值,因此我决定将她们集成到个人 Bash 脚本中,以便从 Jira 任务中读取这些数据,并在完成任务后给相关负责人留言。gulp
Bash 脚本很好,但若是有人在 Windows 上工做,就没法使用了。在作了一些研究以后,我决定使用 JavaScript 将整个过程包装成一个定制化的构建工具。我称之为 Mason,它会改变一切。后端
当您在终端中使用 Git 时,您会注意到它有一个很是友好的命令行接口。若是你拼写错误或者输入错误的命令,它会礼貌地给出你要输入内容的相关建议。一个名为 commander 的库也使用了相同的行为,它是我使用过的众多库中的一个。
考虑下面的简化代码示例。它正在引导命令行接口(CLI)应用程序。
#! /usr/bin/env node
const mason = require('commander');
const { version } = require('./package.json');
const console = require('console');
// commands
const create = require('./commands/create');
const setup = require('./commands/setup');
mason
.version(version);
mason
.command('setup [env]')
.description('run setup commands for all envs')
.action(setup);
mason
.command('create <ticketId>')
.description('creates a new game')
.action(create);
mason
.command('*')
.action(() => {
mason.help();
});
mason.parse(process.argv);
if (!mason.args.length) {
mason.help();
}
复制代码
使用 npm,您能够运行 package.json 中的一个连接,它建立了一个全局的别名。
...
"bin": {
"mason": "src/mason.js"
},
...
复制代码
当我在项目的根目录中运行 npm link。
npm link
复制代码
它将为我提供一个我能够调用的 mason 命令。因此每当我在终端调用 mason,它就会运行 mason.js 脚本。全部的任务都在这个 mason 命令中实现了,我天天都用它来构建游戏。我节省的时间真是难以置信。
您能够在下面看到——在我当时所设想的示例中——我将一个 Jira 任务号做为参数传递给命令。这将访问 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.
复制代码
全部这一切只用几个键就搞定了!
我对整个项目很是满意,因而我决定在我刚刚出版的一本书中重写一个更好的版本,书名为《用 Node.js 实现自动化》。
- 彩色打印: amzn.eu/aA0cSnu
- Kindle: amzn.eu/dVSykv1
- Kobo: www.kobo.com/gb/en/ebook…
- Leanpub: leanpub.com/automatingw…
- Google Play: play.google.com/store/books…
这本书分为两部分:
第一部分是一个方法合集,或者做为单个全局命令的指令构建模块。它们能够在你天天的工做中使用,也能够纯粹为了方便在任什么时候候调用它们来加快你的工做流程。
第二部分是一个从头开始建立跨平台编译工具的演练。每一个脚本实现特定的某个任务,由主命令,一般就是项目的名称,将它们所有封装起来。
书中的项目被称为 nobot (no-bot),它基于一个小卡通机器人。我但愿你能喜欢并从中能够学到一些东西。
我知道每一个企业的状况和流程都不一样,可是你应该从中发现一些东西,即便它很不起眼,也会让你天天在办公室里的工做变得更加轻松。
花更多时间开发,减小管理时间。
谢谢阅读!若是你喜欢,请在下面给咱们点赞。👏
有关软件/硬件各方面的视频,请查看个人 YouTube 频道:www.youtube.com/channel/UCK…
若是发现译文存在错误或其余须要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可得到相应奖励积分。文章开头的 本文永久连接 即为本文在 GitHub 上的 MarkDown 连接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。