Live data from Hacker News

Show HN: Fez, a file-based build tool for JavaScript

isaacbw.com

11–20 of 27 posts

Re: Show HN: Fez, a file-based build tool for JavaScript

#11
post #7

How does this compare to something like Brunch? http://brunch.io/

I haven't seen Brunch before, but it still seems to suffer from the same major flaw as Grunt, which is no sense of file-file relationships:

"Brunch recompiles and concats all your stuff automatically on any change, headlessly. No more need in compicated Makefiles and watchers."

Perhaps I'm wrong, but Brunch just seems like a variant on Grunt with a lot more out of the box for building front-end web applications.

Still, it does look cool. Thanks for the link!

Re: Show HN: Fez, a file-based build tool for JavaScript

#12
Pretty cool! Does it track dependencies of build steps that have "require"? E.g. if I have a javascript bundle being built using browserify - will it track the files that browserify is loading? Also: Did you consider reusing the Grunt ecosystem? E.g. enable loading grunt plugins and treat this as a potential alternate runner?

Re: Show HN: Fez, a file-based build tool for JavaScript

#16
If you're interested in file-based tools, Jake [1] has excellent support for the sort of rules Fez of offers, and is quite mature.

I haven't dug deeply into Fez yet, but here's a few things Fez seems to offer that Jake doesn't:

1- Automatic concurrency. Like Gulp, Fez's subtasks run in parallel. It looks like Fez launches them in subprocesses in order to prevent conflicts, which is a good idea. I'm skeptical of parallelism in builds, though, because race conditions lead to nasty, hard-to-detect-and-fix bugs. I don't think the theoretical speed boost is worth the potential of defects getting into released code.

2- Automatic pipelining. Also like Gulp, Fez can pipe the output of one operation to the input of another. This is useful because you can avoid dealing with temporary files. Unlike Gulp, Fez has an extremely simple and non-error-prone way of constructing those pipelines. I like it.

The major advantage of Fez (and Jake) over Grunt and Gulp is that they use file timestamps to tell if a task needs to run. This can lead to major speed benefits. I recently modified my Jakefile to use this sort of dirty checking on my Sass compiler. I don't change my CSS that often, but the css task was doing an expensive "shell to Ruby" command on every build no matter what. Adding dirty checking shaved my typical build time down from 6.5s to 3.5s.

Overall, Fez looks like a really nice tool. It has a strong ideology (rule-based transformation of files) tempered by a nice dose of practicality. For example, although Fez wants every task to define a file-transformation rule, it also supports "imperative mode" for tasks that don't fit that model. It's very promising, and I'm looking forward to learning more.

[1] Jake: https://github.com/mde/jake

Re: Show HN: Fez, a file-based build tool for JavaScript

#17
post #15

I wonder what the pros/cons are for Fez, compared to Gulp: https://github.com/gulpjs/gulp

Fez looks a lot more promising than Gulp to me:

1- Fez is more pragmatic. It has a strong ideology, but it also tempers that with escape hatches for when your needs don't fit that ideology.

2- Fez's pipelining is really simple and elegant. Gulp's pipelining is verbose and it's easy to forget to return the stream, which leads to race conditions.

3- Fez has dirty-checking so it won't run tasks on files that are up-to-date.

4- Task functions look much simpler to write (and thus, less error-prone).

I haven't tried Fez yet (and I have tried Gulp [1]), but I like what I see.

[1] My review of Gulp (wait for the comments to load): http://www.letscodejavascript.com/v3/comments/lab/1#comment-...

Re: Show HN: Fez, a file-based build tool for JavaScript

#18
I am in the process of creating a build tool too (for a different language: Java) I noticed that you have some magic variables (%f), like make ($
  classes/**/*.class -> src/**/*.java:
      javac [WHAT TO USE IF NOT A 'Maigc var'?]
Also:

1. Will fez support different dir for target and recipes? (like above example I gave) ?

2. What about targets that do not have a file dependency (e.g. .PHONY in make)? How does fez deal with it?

What I am trying to avoid is a big learning curve (or have a user need to read a book) :-)

Thank you and success in your project!

Re: Show HN: Fez, a file-based build tool for JavaScript

#19
post #3

BTW, fezes is faeces in portuguese ;)

Hah! I should probably change it to Fezzes then.

While Fezes, as (s)he said means faeces in Portugues, FEZ does not mean that. It actually means:

   1. Did 
   2. Made 
   3. Built
From the verb FAZER (to build, to do, to make), third person (ele/he) of 'Preterito Perfeito do indicativo'

Re: Show HN: Fez, a file-based build tool for JavaScript

#20
I'm suppose I'm in the minority of developers that _don't_ think we need to learn more build tools.

make, configure, automake, autoconf, MSBuild, Apache Ant, rake, gradle, jake, grunt, gulp, fez

Sorry, I'm sure your system is nice and organized. But now you've introduced one more build dependency that will make projects based on Fez just a little more difficult to on-board.

Post reply on HN