Start free trial
Share this post

The 5 Best Front-End Developer Tools

The 5 Best Front-End Developer Tools

Home Blog Digital Marketing The 5 Best Front-End Developer Tools

Over the last few years, we’ve seen tremendous growth in an entirely new generation of web applications. These apps have become much richer, leading to a huge increase in complexity on the front-end side.

Frameworks like Backbone (the one we use at mention), AngularJS, and EmberJS provide robust solutions to build amazing apps, leveraging all of the web’s power. Meanwhile, Javascript, the web language, has grown a lot (both in popularity and in maturity) and now has back-end side implementation with NodeJS.

In order to succeed in these new challenges of complexity, developers have created a lot of tools to streamline the overall development process. From test frameworks to profiling tools, we now have mature and useful tools to bring the best experience to our users.

At Mention, we love the tools which help us to provide the best quality software while at the same time making our life easier. In this blog post, we’ll present the 5 best tools and frameworks that we use every day to address these challenges.

Chrome dev tools

The best tool we have in our hands today. Since its birth, Google Chrome has invested a lot in its developer tools and is still improving them continuously. Each release (every 6 weeks or so) comes with its own brand new dev tool features.

The dev tools are a complete suite of diverse instruments. You can edit the DOM (HTML)/CSS in real-time, debug JavaScript step by step while undertaking a deep performance analysis, and even add a terminal. We recently solved some render performance issues thanks to this.

The DOM/CSS editor is an extremely powerful tool, letting you provide real-time feedback to your team, iterating fast on the UI/UX of a new feature.

The official website and the Google Developers Youtube channel both are goldmines of information. For example, the section about command-line API contains really useful commands.
You can for example copy anything to your clipboard from the console by calling the special `copy` function and passing the thing to be copied (object, function return, etc.)

A lot of great tutorials are also available on HTML5 Rocks.

On top of all this, the network tools let you understand what is really going on under the hood and optimize your loading flows, all while the timeline gives you a deeper view of what the browser does.

If you’re curious enough (like us) you can learn a lot about how a browser (and indirectly, the web) is working, letting you take back full control of your application’s lifecycle.

I personally think that if they continue to follow this path, they will definitely become the ultimate IDE (or Integrated Developer Environment) for the web[a] offering web developers a powerful development space bundled directly into the browser.

Grunt

front end testing tools

Grunt is our preferred tool when it comes to task automation. It’s a JavaScript task runner, offering a lot of bundled plugins for common tasks, while still being very extensible, giving you the option to write all kinds of tasks to suit your need. The best comes when you can combine tasks together to create even more powerful ones!

Grunt’s scope goes beyond simply automating front-end related tasks. We use it, for example, to continuously test in PHP while we develop:

terminal = require('color-terminal')

log = (error, stdout, stderr, cb) ->
    if error
        terminal.color('red').write stdout
    else
        terminal.color('green').write stdout

    cb()

module.exports = (grunt) ->
    grunt.loadNpmTasks 'grunt-contrib-watch'
    grunt.loadNpmTasks 'grunt-shell'

    grunt.initConfig
        testFilepath: null

        watch:
            php:
                options:
                    event: 'changed'
                    spawn: false
                files: [
                    'foo/bar/**/*.php'
                    'foo/bar/**/*Test.php'
                ]
                tasks: 'shell:phpunit'

        shell:
            phpunit:
                options:
                    callback: log
                command: 'echo <%= testFilepath %> && phpunit -c app <%= testFilepath %>'

    grunt.event.on 'watch', (action, filepath, ext) ->
        regex = new RegExp("foo/bar/([a-z0-9]+)/([a-z0-9/]+)", "i")

        if filepath.match regex
            if filepath.indexOf('Test') is -1
                testFilepath = filepath.replace regex, "foo/bar/$1/Tests/$2Test"
            else
                testFilepath = filepath

            grunt.config 'testFilepath', testFilepath

We also used it to create a workaround for some performance issues we found in the Vagrant Rsync-auto watcher, which were recently introduced. Grunt offers a wide variety of plugins, ranging from watching files to linting, compiling, and minifying your code. Its syntax is consistent and easy to learn, and a lot of examples are available around the Web.

LiveReload

How many times on average do you hit the refresh key on your keyboard every day? A lot, right? LiveReload is a simple Web protocol that triggers events to the clients whenever files are modified.

Clients can handle this event in their own way, even if the most common use case is when a file is modified (or is a compiled version).

The client/server comes in various implementations. We personally use the one bundled in the Grunt watcher plugin, as well as this simple Chrome extension as a client (which has the advantage of being switchable, because you don’t always want live reload, after all).

You can see it in action here: https://www.youtube.com/watch?v=wCVwdvufTds.


Talking about Chrome extensions, the Chrome store is full of powerful ones. Go and explore, and you’re sure to discover things that will make your life far more easier.   Here are some of our favorite ones:

  • WhatFont, which lets you discover the rendered font of any element on any website (useful when looking for the perfect typography you saw on another site, or for debugging your font-face styles).
  • Page ruler: another useful one, mainly because just like any front-end developer, you’re obsessed by pixel perfection, right?
  • Proxy SwitchySharp can also be of great help when it comes to debugging localized information (default currency, phone numbers, etc).

Mocha / Chai / Sinon

Does testing make you queasy? It’s often the case, mainly because it requires a ton of bootstrapping and if you don’t design things to be testable from the beginning, things can become very hard. Fortunately, we now have great testing frameworks, as powerful as what you may have already used with other languages.

The two main frameworks today are Jasmine and Mocha. I personally have had experience with both in the past and have finally come to choose the latter – Mocha. The main advantage comes when you work with a lot of asynchronous code, a common use case when developing in JavaScript.

The chosen syntax for Jasmine is the default one, described in the official documentation. This unofficial extension enhances Jasmine async feature to provide the same thing that Mocha. Take few minutes to understand this sample and observe how clearer is the Mocha syntax. Unlike Jasmine, Mocha offers only the behavior testing structure (more about BDD), and not the assertion/mock framework. But there’s nothing bad here, since it perfectly integrates with dedicated frameworks like Chai and Sinon.

Sinon comes with a full-set of functions to easily mock objects and stub methods. For example, here’s how you can assess that a method has been called using the Sinon’s spy type (taken from the excellent documentation):

Chai is remarkable in the way that it lets you make assertions in a very similar way to natural language. For instance, please consider the following example, leveraging the should assertion syntax:

// Function under test
function once(fn) {
    var returnValue, called = false;
    return function () {
        if (!called) {
            called = true;
            returnValue = fn.apply(this, arguments);
        }
        return returnValue;
    };
}

it("calls the original function", function () {
    var spy = sinon.spy();
    var proxy = once(spy);

    proxy();

    assert(spy.called);
});

Very clear, right? No reason not to go testing your code now!

Karma

Last but not the least, Karma (ex Testacular) is a JavaScript test runner written by the guys behind AngularJS. Now that you’re enjoying writing tests with Mocha, Chai, and Sinon, what about running them continuously, providing you with real-time feedback?

Karma lets you execute your tests from your workstation (in continuous mode) to the production CI. It can launch multiple browsers (Chrome, Firefox, IE (!), PhantomJS, etc.) and run your tests against them, giving you maximum confidence in your code.

While developing, it’s a real pleasure to write code on your first monitor and get the results, in real-time, on the second, all running against multiple browsers.

You’re now good to go to become a front-end ninja, ready to beat all the adversity that you’ll meet during your journey.

Of course, we didn’t even mention here any text editors (we use both Sublime Text and Vim at mention), roots of all our productivity!

All the samples are available on GitHub Gist. Of course, feel free to play with it!

And you, what are your favourite tools when it comes to Front-end development?

PS: If you’re wondering what Mention is, here is a short video:

New Call-to-action
Share this post
Arnaud Breton

Full-stack developer with a specific focus on the front-end side and user experience. Arnaud was co-founder and CTO of UniShared and VideoNot.es, part of the Imagine K-12 2013 Winter batch.

Guest Blogger @Mention