웹브라우저에서 커피스크립트 컴파일러만 불러들여서 사용한다면 쓸 수 없지만 Unix기반에서는 보통 Node.js와 함께 npm을 이용해서 커피스크립트를 설치하기 때문에 이렇게 설치할 경우 커피스크립트의 빌드도구인 Cake를 사용할 수 있고 Cake의 파일은 Cakefile입니다.(Make를 Cake로 바꿔서 Make를 연상시킬수 있으면서 커피와 케이크라니 네이밍 센스가 참 좋군요.)
Cakefile은 cake명령어로 실행할 수 있으며 cake를 실행하는 위치에 Cakefile라는 파일이 존재하면 됩니다. 파일이 없을 경우 오류가 납니다. 커피스크립트를 NPM으로 글로벌설치를 하였다면 자동으로 Cake로 설치가 됩니다. Cake의 사용법을 보기 위해서 다음과 같이 간단한 Cakefile을 만들어 보겠습니다.
task 'helloworld', 'echo hello world', ->
console.log 'Hello World'
task라는 이름으로 해야할 작업을 정의해 주면 되는데 다음과 같은 형식으로 정의합니다.
task 테스크이름, 테스크설명, 실행할함수
그래서 위 코드는 helloworld라는 테스크는 console.log로 "Hello World"라고 출력해 주도록 정의한 것입니다.
$ cake
cake helloworld # echo hello world
$ cake helloworld
Hello World
다른 파라미터없이 커맨드라인에서 cake 명령어를 실행하면 Cakefile에 정의된 테스크의 리스트를 출력해 줍니다. 그리고 cake helloworld를 실행하면 해당 테스크에 정의된 함수가 실행되는 것을 볼 수가 있습니다. Cakefile은 사실 커피스크립트 파일이기 때문에 커피스크립트 문법을 그대로 사용할 수 있으며 Node.js까지 같이 사용하면 필요한 작업은 어떤 것이든 할 수 있습니다. task정의는 사실 task라는 함수에 파라미터 3개를 넘겨준 것이고 실행되면 마지막 파라미터의 콜백함수가 실행되는 것입니다.
커피스크립트를 자바스크립트 파일로 컴파일 해주는 다음과 같은 빌드작업을 자동화 할 수도 있습니다.
{exec} = require 'child_process'
task 'build', 'Build project from src/*.coffee to lib/*.js', ->
exec 'coffee --compile --output lib/ src/', (err, stdout, stderr) ->
throw err if err
console.log stdout + stderr
task build를 실행하면 src 폴더에 있는 모든 커피스크립트 파일을 자바스크립트로 컴파일해서 lib 폴더에 두게 됩니다. {exec} = require 'child_process'는 커피스크립트의 Destructuring Assignment 기능입니다. 예를 들면 {a, b} = {a:1, b:2}를 실행하면 자동으로 a변수에는 1이 b변수에는 2가 할당되는 것이므로 exec = (require 'child_process').exec와 동일합니다. exec를 이용하면 커맨드라인에서 사용하는 명령어를 그대로 실행시킬 수 있습니다.
커피스크립트의 위키를 참고하면 더 많은 예제에 대해서 확인할 수 있습니다. 사실 저는 쉘로 컴퓨터를 배우진 않았기 때문에 Makefile을 잘 사용하지는 못하는데 커피스크립트로 원하는 로직을 만들어서 쉽게 실행할 수 있으니 작업을 자동화하기에 꽤나 편하군요.
CoffeeScript의 cake 까지 설명을 해주셨군요. 좋은글 감사합니다.~~
작성자체는 커피스크립트라서 cake는 설명할게 별로 없긴 하네요..
그래도 이거 쓰니까 이런저런 작업 자동화하는데 좋더군요 ㅎ