前端开发工程师优秀开发工具推荐

原文作者 Arnaud Breton 为前端工程师,特别专注于前端和使用者经验,这篇文章出自于mention blog。以下内容由作者以第一人称撰写。

过去几年一直不断地提到 Web 应用新世代的成长,这些 App 内容变得越来越丰富,带动了前端整体的复杂度大幅增加。

像是 Backbone(藉由提供模型)、AngularJS 和 EmberJS 框架都是创造新 App 非常好的框架,增强了所有 Web 的功能;同时,Web 程式语言 Javascript 在普及度和成熟度上已经进步了非常多,而且还能和 NodeJS 在后端协同工作。

但为了能持续面对复杂度的新挑战,开发者已经创造更多工具使整体开发过程更加流畅,从测试框架到分析工具,这些成熟又有用的工具把最棒的体验带给我们的使用者。

就如同刚刚所提到的,我们喜欢能够帮助我们提供最棒品质的软体,同时也能使得生活变得更加简单方便,本文要分享给大家 5 个我们每天面对挑战所使用最棒的工具和框架:

Chrome dev tools

这是目前最好的前端开发工具!

Chrome 自从它诞生后,就已经大量投资在开发者工具软体,至今仍不断的在改善它,每一个发布会(每六周一次)都会伴随着它自己的全新开发功能。

这个开发工具是一个完整的多元软体套件,你可以实时编辑 DOM(HTML)/CSS,当进行一个深入的效能分析时,可以一步步找出 Javascript 的错误,甚至能增加终端机指令。感谢有它,近来解决了回报效能的问题。

DOM/CSS 编辑器是非常强大的工具,能即时回馈给你的团队,能够在 UI/UX 的新功能上很快地执行迴圈。

官方网站和 Google Developers YouTube 管道都是资讯的金矿,比如说,命令列的 API(应用程式介面,Application Programming Interface)包含非常多有用的指令,比如说从控制台功能中的复制指令,复制到剪贴簿上。

许多详细的使用手册同样在 HTML5 Rocks 里都能参考。如果你的好奇心很强,并且想了解浏览器究竟是如何运作的,那么你会在这些教学里学到很多东西,帮助你全面掌控开发周期。

除了上述的之外,最重要的是,透过网络工具你能知道现在在介面之下到底发生了什么事情,以及优化你的下载速度,时间轴会以更深入的角度来告诉你浏览器做了哪些事情。

如果你跟我们一样充满好奇心,你可以学到更多关于浏览器、Web 是如何运作的,如此一来,你就可以反过来完整的操控应用程式的生命周期。

以我个人观点来说,如果它们依照现在的路线持续发展下去,肯定会变成 Web 供应开发商最终的IDE(Integrated Developer Environment),最强大的放入整合发展空间。

Grunt


说到工作自动化,Grunt 是我们的首选。

它是 Javascript 跑任务的专家,针对一般的任务提供大量整合性的外挂程式,扩展程度仍很高,提供很多选项让你能够自由的写任何符合需求的工作内容。最棒的是,你能够将这些任务结合创造更强大而复杂的工作。Grunt 的范畴超出仅仅是自动化前端相关的工作,举例来说,当我们在开发时,我们利用它来测试 PHP:

   
   
   
   
  1. terminal = require('color-terminal')
  2. log = (error, stdout, stderr, cb) ->
  3. if error
  4. terminal.color('red').write stdout
  5. else
  6. terminal.color('green').write stdout
  7. cb()
  8. module.exports = (grunt) ->
  9. grunt.loadNpmTasks 'grunt-contrib-watch'
  10. grunt.loadNpmTasks 'grunt-shell'
  11. grunt.initConfig
  12. testFilepath: null
  13. watch:
  14. php:
  15. options:
  16. event: 'changed'
  17. spawn: false
  18. files: [
  19. 'foo/bar/**/*.php'
  20. 'foo/bar/**/*Test.php'
  21. ]
  22. tasks: 'shell:phpunit'
  23. shell:
  24. phpunit:
  25. options:
  26. callback: log
  27. command: 'echo <%= testFilepath %> && phpunit -c app <%= testFilepath %>'
  28. grunt.event.on 'watch', (action, filepath, ext) ->
  29. regex = new RegExp("foo/bar/([a-z0-9]+)/([a-z0-9/]+)", "i")
  30. if filepath.match regex
  31. if filepath.indexOf('Test') is -1
  32. testFilepath = filepath.replace regex, "foo/bar/$1/Tests/$2Test"
  33. else
  34. testFilepath = filepath
  35. grunt.config 'testFilepath', testFilepath

我们同样也用它暂时解决在 Vagrant 中自动监测与保护的 rsync(Unix 下的一款应用软体)一些效能问题,这是近来才被引进的方法。Grunt 提供很广泛的外挂程式,从浏览档案夹、诊断讯息、编译程式到最简化你的程式码。它的句法是一致且容易学习的,可以让琐碎的工作变得简单。

LiveReload


你有没有算过,每天平均有多少次会按键盘上的重新整理键呢?非常多,对吧!

LiveReload 是一个简单的 Web 协议,不论档案在哪时候被修改而触发事件,客户都能自行处理事情;客户端和伺服器端都能进入各种不同的实作。

说到 Chrome 的扩充功能,Chrome 商店就是一个很强大的例子。去体验看看吧,你一定能发现很多让生活变得更简单的东西。

以下几个是我们最喜欢的:

1. WhatFont:你可以透过它知道在任何网站上内容的字型是什么,当你在找最适合的文字编排时,或是重新调整美化你的字型风格时,它是非常好用的小工具。

2. Page ruler:另一个很好用的应用程式,主要是因为任何前端开发者,都对像素要求百分之百的完美。

3. Proxy SwitchySharp:说到找出在地化资讯错误最佳的工具就非它莫属,在地化资讯是哪些?比如说电话号码、预设货币等等。

想知道更多吗?在 Chrome App 中你能得到更多资讯!

Mocha/Chai/Sinon

测试测试,测试到你很想吐吗?这是很常发生的,因为需要一大堆引导指令,而且在前端开发的初始阶段没有设​​计好测试,那么后面的工作往往会变得非常困难。

很幸运的是,我们现在有很棒的测试架构,就和你已经在使用的其他语言一样,非常的有用和强大。两个主要的框架是 Jasmine 和 Mocha。

过去我两个都有使用过,最终选择了后者,Mocha。它最主要的优势在于,当你必须和非同步的编码一同运作的时候,在 Javascript 的发展中它最普遍使用的方法。比如说,举一个非常简单的例子,

   
   
   
   
  1. Q = require('q');
  2. var AsyncProcess = (function() {
  3. function AsyncProcess() {}
  4. AsyncProcess.prototype.process = function() {
  5. var deferred;
  6. deferred = Q.defer();
  7. setTimeout((function() {
  8. deferred.resolve(42);
  9. }), 100);
  10. return deferred.promise;
  11. };
  12. return AsyncProcess;
  13. })();
  14. exports.AsyncProcess = AsyncProcess;

这里有两个不同的规格,一个由 Jasmine 写,另一个则是 Mocha/Chai:

   
   
   
   
  1. AsyncProcess = require('./async-process').AsyncProcess
  2. describe('AsyncProcess', function() {
  3. var asyncProcess;
  4. beforeEach(function() {
  5. asyncProcess = new AsyncProcess();
  6. });
  7. it('should process 42', function() {
  8. var done = false;
  9. var processed = null;
  10. deferred = asyncProcess.process();
  11. deferred.then(function(result) {
  12. done = true;
  13. processed = result;
  14. });
  15. waitsFor(function() {
  16. return done;
  17. }, "the async process to complete", 10000);
  18. runs(function() {
  19. expect(processed).toEqual(42);
  20. });
  21. });
  22. });

 

   
   
   
   
  1. AsyncProcess = require('./async-process').AsyncProcess;
  2. Chai = require('chai');
  3. Chai.should();
  4. describe('AsyncProcess', function() {
  5. var asyncProcess;
  6. beforeEach(function() {
  7. asyncProcess = new AsyncProcess();
  8. });
  9. it('should process 42', function(done) {
  10. deferred = asyncProcess.process();
  11. deferred.then(function(processed) {
  12. processed.should.be.equal(42);
  13. done();
  14. });
  15. });
  16. });

Jasmine 的句法选择是预设的,并以官方的文档作说明,非官方的扩充功能增进了 Jasmine 非同步特色,提供和 Mocha 一样的功能。花一些时间,来了解这个范例以及观察 Mocha 的语法有多清楚。

不像 Jasmine,Mocha 只提供行为的测试架构,更多关于 BDD(Behavior-driven development),而不是假物件(mock,主要存在的目的是协助单元测试程式可以顺利进行)或是断言(assertion,放在程式中的一阶逻辑,如果一个结果为真或为假的逻辑判断式)架构,因为它整合专用架构非常棒,就像是 Chai 和 Sinon,几乎没什么不好的地方。Sinon 有完整的功能来 mock 假物件和 stub 假物件(用途和 mock 很接近)。

举例来说,你可以如何评估的方法,一直以来都使用 Sinon 的间谍类型(撷取自很杰出的文档):

   
   
   
   
  1. // Function under test
  2. function once(fn) {
  3. var returnValue, called = false;
  4. return function () {
  5. if (!called) {
  6. called = true;
  7. returnValue = fn.apply(this, arguments);
  8. }
  9. return returnValue;
  10. };
  11. }
  12. it("calls the original function", function () {
  13. var spy = sinon.spy();
  14. var proxy = once(spy);
  15. proxy();
  16. assert(spy.called);
  17. });

Chai 的功能是在断言这方面是非常杰出的,以和平常的语言非常相似的语法,举例来说你可以看到以下的程式码,就知道它很清楚简单:

   
   
   
   
  1. foo.should.be.a('string');
  2. foo.should.equal('bar');
  3. foo.should.have.length(3);
  4. tea.should.have.property('flavors').with.length(3);

Karma


最后一个是 Karma,Karma(一个测试程式是否符合需求的测试工具)是 Javascript 的程式测试工具,由AngularJS 的团队写的,现在你可以徜徉在 Mocha、Chai 和 Sinon 中写测试程式,何不同时用它们持续地测试、跑程式,给你实时的回馈呢?

Karma 可以让你从你的工作站到持续整合制造(CI,Continuous Integration)执行你的测试,它能同时发布到多个浏览器(Chrome、Firefox、IE 和 PhantomJS 等等),除此之外,还能跑你的测试来挑战它们,给予你对你的程式码最大的信心。

当然,我们甚至还没有提到任何文字编辑器,SublimeText 和 Vim 我们都有用,它们是我们生产力最最重要的基础。

然而在做开发的过程中,最真实的快乐就是你第一次写的程式进行监测然后得到结果,这是一种实时的成就感,然后接下来你就能将它们发布到浏览器上。

现在你已经非常有能力成为前端的忍者,在你的开发旅途中已经准备好要迎接每个挑战了。但如果您刚好是一名前端工程师,也欢迎您在下面和大家分享喜欢的工具。

原文地址:blog.mention

你可能感兴趣的:(前端开发)