Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating grunt tasks for compiling coffeescript files recursively inside directories and subdirectories

I am trying to create a grunt task to compile coffeescript code spread across multiple files to .js files of the same name. I have the grunt coffeescript plugin and I am looking to use the "glob_to_multiple" spec that is given on this page:

https://www.npmjs.org/package/grunt-contrib-coffee.

 glob_to_multiple: {
    expand: true,
    flatten: true,
    cwd: 'path/to',
    src: ['*.coffee'],
    dest: 'path/to/dest/',
    ext: '.js'
  },

However, this grunt task does not compile .coffee files to .js files of corresponding names - for all .coffee files in a directory and its sub directories. I've been tweaking this config, for a while but I can't get it to do this. Please help.

like image 478
EternallyCurious Avatar asked Jan 11 '23 13:01

EternallyCurious


2 Answers

The pattern *.coffee will only match files that end with .coffee in the cwd folder. The pattern **/*.coffee will match all files that end with .coffee recursively in all sub folders of cwd and the cwd itself.

Try the following config:

glob_to_multiple: {
  expand: true,
  flatten: true,
  cwd: 'path/to',
  src: ['**/*.coffee'],
  dest: 'path/to/dest/',
  ext: '.js'
},

Also remove flatten: true if you want it to recreate the folder structure in path/to/dest/ instead of compiling all files to the single folder.

like image 72
Kyle Robinson Young Avatar answered Apr 30 '23 02:04

Kyle Robinson Young


The accepted answer provided by Kyle does the exact opposite of what you want to achieve!

To make it work like you want to, just set dest: path/to. Make sure to set flatten: false flag.

With the below example you can make it work

coffee: {
  glob_to_multiple: {
      expand: true,
      flatten: false,
      cwd: '',
      src: ['server/api/**/*.coffee', 'client/app/**/*.coffee'],
      dest: '',
      ext: '.js',
      extDot: 'last'
  }
}

In the src:[] array you can put in whatever root/subdirs you want to be crawled. You could also cwd: '' and dest: '' to crawl your whole project including node_modules directory, just as a proof of concept. All js files will get created at the exact same spot where their corresponding coffee origins are located. The extDot: 'last' makes sure that files like myUnitTest.spec.coffee will get processed properly as well.

like image 33
stevek-pro Avatar answered Apr 30 '23 03:04

stevek-pro