编者按:本文做者为 Soledad Penadés, Sole 在 Mozilla 的 Tech Evangelism 团队工做,帮助人们在网络上创造神奇的东西。本文主要介绍node-firefox的基本知识,以及它如何帮助你加速 Firefox OS 应用开发,由 OneAPM 工程师编译呈现。css
在 Mozilla 基金会,咱们一直致力于寻找简化开发人员生活的方法。当胸怀抱负的应用开发者告诉咱们初学开放式 Web 应用很麻烦时,咱们便致力于将应用管理器转变为对更多初学者友好的环境,反过来也给 WebIDE 让路。该工具简化了许多曾经缓慢而繁琐的行为,好比建立新的应用、下载和安装模拟器或运行和调试应用。node
但仍有部分开发者感受受冷落了:计算机高手!他们已经具有了基于 node.js 的构建工具链,任务包括资产优化、代码提示、或测试运行等。他们也常用像 Browserify 这样的工具,或许甚至都不编写 JavaScript 代码,相反,却倾向于选择 CoffeeScript 这样的语言。不过,全部这些好东西都要求你先构建应用或网站,以后才能将其用于你的设备或浏览器中。git
原本,咱们想让这些开发人员离开本身心爱的命令行(或编辑快捷键!)转而使用 WebIDE,经过单击按钮来部署应用,而后再回到他们喜欢的编辑器。可是,他们却一致回答:咱们不喜欢点击!咱们喜欢终端!github
你们不喜欢 WebIDE,由于它意味着上下文不断变化。它并不高效,咱们是工程师,若是工程师喜欢一件事的程度超过构建新的应用,那它就极可能是优化并简化流程。web
既然咱们已经有了构建脚本,只剩下一个步骤——部署,就能让咱们的应用投入运行时,这也是咱们使用 WebIDE 的目的。因此,显而易见问题将是:咱们能利用 WebIDE 进行部署吗?以编程的方式?npm
每个 Firefox 运行时都有所谓的远程调试服务器。因为一些明显的安全缘由,默认并不启用该服务器,可是当启用时,客户端可与其链接并利用它的各类功能优点,好比安装应用、访问控制台等。这就是 WebIDE 内部所作的事情。编程
每一个功能都由一个 actor 提供。例如,假设咱们想要列出已安装的应用,那么能够……gulp
首先,找到 webApps
actor浏览器
而后运行 getAll
命令安全
再而后,获得回应的应用列表
还有一个例子是安装打包的应用,步骤为:
首先,使用任何库或任何你喜欢的方式压缩应用内容
而后获得 webApps
actor
用压缩文件内容调用 webApps actor
中的 uploadPackage
命令
调用结果即为File
actor
用返回值 File
actor 调用 webApps
actor 中的 install
命令
完成!
所以,安装应用的魔法不在 WebIDE ,而是在服务器中!咱们能够以编程方式利用这类魔法,可是从头构建一个客户端,创建 TCP 链接并语法解析包,并不是你真正想作的:相反,你想作的是编写应用并将其推到设备中运行。
不用绝望,由于 node-firefox 能帮你实现这一目标。它不是一串总体的代码,而是一系列 node.js 模块,每一个模块执行不一样的任务,托管在各自的代码库中,并发布于 npm 注册表中。只要你须要,你能够在脚本或任务运行器中尽情使用这些模块,所以,你终于不用离开命令行就能构建并运行应用了。
说了这么多,如今让咱们看看如何编写一个能启动模拟器的脚本吧!
首先使用 npm 指令在项目中安装模块:
npm install --save node-firefox-start-simulator
下面是写好的脚本:
var startSimulator = require('node-firefox-start-simulator'); startSimulator({ version: '2.2' }) .then(function(simulator) { console.log('Listening in port', simulator.port); });
好啦!只需几行代码,你就能以编程方式启动2.2版本的模拟器。若是你不关心版本问题,就不要在startSimulator
中传入任何参数,这样就将启动所发现的第一个模拟器:
startSimulator().then(function(simulator) { // your code });
咱们还能够经过动图查看这个过程。下图就显示了经过 node.js 脚本启动模拟器、安装应用和运行应用的全部过程:
该示例使用的代码实际上就是 node-firefox-unistall-app的表明范例。每一个node-firefox
模块都含有一个示例文件夹,帮助你快速入门。
如咱们开始所提到的,许多转向应用开发的网页开发者想继续使用任务运行器,所以咱们也就如何使用带gulp的node-firefox
写了一个示例。
让咱们运行这个default-one
任务。这样会启动模拟器、部署应用,再多点挑战,还能持续关注 CSS 变化。若是你编辑并保存了任何一个应用的样式表,文件监视器会检测其变化并发送新的文件内容到运行时,这样不用关闭、推动并从新启动整个应用就可迅速替换样式表。下面的例子将背景颜色从稳重的深蓝色改变成永恒不变的 Paul Rouget 粉红色!
实时 CSS 重载很适合搭建与试验 UI 界面。没必要重载应用并导航到你想工做的具体部分,这样能够节省大量时间——要是当年笔者在编程安卓应用时也能用这个就行了。
可是咱们还能够作得更好。default-all
任务和default-one
的功能相同,但前者是针对系统安装的全部模拟器,所以你能同时看到全部模拟器的 CSS 改变效果:
不幸的是,模拟器2.1和2.2中存在一个问题,它们不能重载样式表的变化,但这个问题已经存档并会到解决。
当前这套模块可帮助你找到运行时在监听的端口,找到并启动模拟器;链接到运行时;找到、安装、卸载并运行应用,重载样式表。
你或许已经注意到一个模式,可是以防还不够明显,咱们正在努力编写一些简单的模块。每一个模块应仅执行一个动做,返回一个 Promise 并尽可能减小使用依赖。
小的模块很易理解、使用并进行测试。一样,未来大多数 Web API 的设计目的都是服务于 Promises ,咱们想编写的代码应着眼于将来而不是过去。此外,减小使用依赖的数量也可以使新手更易熟悉模块,由于要了解的不熟悉的新元素更少了。
最后,因为全部模块的工做方式都相同,全部当你知道如何使用一个模块后,你就知道了如何使用剩下的——惟一变化的就是参数和结果。
有不少事情咱们想知道未来可否实现,有些人称之为特点,但咱们称之为‘理想一想法’。
一个常常出现的例子即 WebCLI:与 WebIDE 相对应,你经过 WebIDE 所作的全部事情均可以经过一个命令行工具来实现。笔者不断纠结于这两个观点——“这想法很棒”和“或许咱们根本不须要这个,有一个任务库就足够了”,不过你们彷佛比较喜欢这个想法,因此应该没那么差!
还有一个很棒的特点是遇到从命令行运行却崩溃的应用,可使用 DevTools 调试程序。经过命令行运行应用的想法很好,可是命令行调试程序却没那么给力!为何不选择一个一箭双鵰的方法呢?
或者,用命令行控制任何浏览器均可以干净利索,只要经过 Valence 将两者相联系!
最后是笔者最钟爱的梦想一想法:Firefox OS 定制版。想象一下,若是咱们仅仅编写一个脚本就能建立一个空白 Firefox OS 平板,装上咱们钟爱的应用和设置,生成总体的 Firefox OS 图像,那么以后咱们即可将其闪存到设备上。因为这不是一个二进制大对象而只是一个脚本,因此咱们仅可在其函数库中进行发布,其余人可根据版本合成或建立他们本身的 Firefox OS。
咱们面临的问题还有不少,须要不少领域的协做。或许最紧急的任务是获取更好的多平台支持。目前,咱们只能经过网络与运行时进行交互,而不是实际的设备。另外,除了 Mac OS,对平台的支持还极度缺少。
另外一个重要方面是测试。若是咱们更早、更多、更频繁地进行测试,将能检测到像 CSS bug 这样的问题,这个问题是笔者在建立gulp 演示程序时偶然发现的。咱们想在几个平台上运行这些模块,并让这些模块链接到其余不一样的平台,包括实际的设备。
固然咱们须要更多模块和更多范例!为了保证两我的不会编写同一个模块,咱们讨论在高级项目问题跟踪器中提出新模块。咱们很是期待见到更多的范例,或者更好的范例——使用咱们的代码将现有功能钩嵌到其余节点模块中。例如,可经过 firefox-app-validator-manifest模块添加清单验证。
还有,咱们一如既往的须要大家。咱们不是大家,所以咱们不知道大家的须要和想法。固然,咱们也不能像大家同样使用软件。咱们须要你的输入信息,还须要大家的贡献!
咱们期待大家使用node-firefox建立的成果。若是遇到任何问题,请将问题整理成文档发给咱们,或者在 irc 跟咱们说。咱们会在 irc.mozilla.org 中的 #apps 和 #devtools 频道解疑答惑。
这里要不感谢 Nicola Greco 就太不厚道了, 去年夏天笔者指导过他,当时他还在 Mozilla 实习。是他提出了构建我的节点模块的初步设想,这种模块会帮助你开发 Firefox OS 应用。去看一下他的实习总结报告吧,真的的很是有趣且具备说明性!
很是感谢全部(极其耐心的) DevToolers:Ryan Stinnet、Alexandre Poirot、Jeff Griffiths 和 Dave Camp,他们帮助咱们找到远程服务器的方向,actors 等等。尤为感谢 Heather Arthur,他编写了 firefox-client,使得编写node-firefox
的方式比原来更简便温馨。
OneAPM 是应用性能管理领域的新兴领军企业,能帮助企业用户和开发者轻松实现:缓慢的程序代码和 SQL 语句的实时抓取。想阅读更多技术文章,请访问 OneAPM 官方博客。