Coffee script compilation

2019-01-21 14:45发布

问题:

I'm looking for simplest possible way to automatically recompile coffee scripts into JS.

Reading documentation but still having troubles to get exactly what I want.

I need it to watch folder src/ for any *.coffee files modifications and compile them into concatenated javascript file into lib/something.js.

Somehow can't combine watching, compiling and concatenating together. :/

回答1:

The coffee script documentation provides an example for this:

Watch a file for changes, and recompile it every time the file is saved:

coffee --watch --compile experimental.coffee

If you have a particular script you want to execute, you could use the linux command dnotify: http://linux.die.net/man/1/dnotify

dnotify --all src/ --execute=command

Edit: I had some problems with the --execute part of dnotify - might be a bug, but this is what I got working:

dnotify --all . -e `coffee -o lib/ --join --compile *.coffee`

That executed the compile command each time a file was modified.

If you append the command with an ampersand, like this:

dnotify --all . -e `coffee -o lib/ --join --compile *.coffee` &

it will be started in a separate process. To get the process ID, you can use this:

ps ux | awk '/dnotify/ && !/awk/ {print $2}'

And then, you can kill the process by using something like this:

kill `ps ux | awk '/dnotify/ && !/awk/ {print $2}'`

But if that's your objective (to kill by process name), you can do it in a simpler way by using:

killall dnotify


回答2:

Try jitter

https://github.com/TrevorBurnham/jitter

It watches a directory of .coffee files, and when it detects that a file has changed it automatically recompiles it to .js

jitter /path/to/coffee/dir /path/to/js/dir

I've been trying it out with a project using coffescript and sencha touch, it seems to work pretty well. Doesn't take care of the concatenation problem, but it's really simple to use for someone who just needs auto-compilation.



回答3:

This helped me (-o output directory, -j join to project.js, -cw compile and watch coffeescript directory in full depth):

coffee -o web/js -j project.js -cw coffeescript


回答4:

Well coffee --watch has 2 major flaws:

  • New files created after command has been issued aren't being watched
  • Requires manual initiation so there can be a chance you forget to do it, which doesn't sound more brilliant than forget to compile before you git commit it

The solution I came up with is a rather simple Bash script that takes coffee --watch a few steps further which will allow your working directory tree to be watched ever since system login, and automatically get compiled into JavaScript on each file save/change or new file creation:

http://blog.gantrithor.com/post/11609373640/carefree-coffeescript-auto-compiler

There may be more elegant way to do this, but this implementation works great =)



回答5:

find -type f | grep .coffee | xargs ls -t | head -n 1 | xargs coffee -cw

find last modifed coffee script and put it in compile-watch mode



回答6:

Being one level above /src, this will work for all .coffee files found no matter the depth.

coffee -w -c src/


回答7:

I have found the command-line coffeescript compiler to be poorly suited for complex project structures.

If you and your build process are as needy as I am, check out Grunt - http://gruntjs.com/

It allows for highly complex build processes - for example, you might

  1. concatenate coffee to new file(s)
  2. compile
  3. concatenate some additional JS
  4. minify

Tasks can be strung together, and watched files/folders are highly customizable as well.



回答8:

The short answer to your question is that the coffee utility wasn't designed for this; combining file-watching and concatenation is actually pretty complex. Expect more sophisticated build tools for CoffeeScript in the near future; until then, you might want to do your project's builds by writing a Cakefile or Ruby Watchr script. Then you can also throw in minification, documentation-generation, and whatever else you need for your particular project (not to mention guaranteeing a particular concatenation order).



回答9:

find `pwd` | grep .coffee | xargs coffee -w -c

try this one in root directory of the application



回答10:

Changed mind about concatenation.
Created small compiler.sh file which contains:

dnotify -M src/ -e coffee -o lib/ -c src/ &
dnotify -M spec/ -e coffee -o lib/ -c spec/ &

Kind a suits my needs.



回答11:

nodemon -x coffee server.coffee does it for me.

Install nodemon using npm install -g nodemon