2013-10-08 1 views
1

Im с использованием GruntJS с grunt-contrib-coffee. Он отлично работает! С помощью плагина Watch он еще лучше. Но здесь возникает мое сомнение:GruntJS + contrib-coffee: компиляция, но сохранение структуры папок

У меня есть две папки, одна из которых с моими файлами coffeescript и другая с моими (скомпилированными) js-файлами. Похоже, этот

root_folder 
|--- public 
    |--- libs 
    |--- ppalmeida <= here are my .js compiled files from src_client coffeescripts 
      |--- controllers 
      |--- core 
       |--- Main.js 
      |--- models 

|--- src_client <= here are my .coffee files 
     |--- controllers 
     |--- core 
      |--- Main.coffee 
     |--- models 

Когда я строю, используя coffee --output --compile команду, структура папки сохраняется: CoffeeScript кли компилирует папку «ядро» и внутри Main.js.

Но когда Im работает GruntJS, он помещает все файлы в одну и ту же папку (ppalmeida). Таким образом, файлы контроллеров, ядро, модели файлов загружаются в одну и ту же папку, которую я не хочу.

Это мой glob_to_multiple конфиги:

coffee: 
     glob_to_multiple: 
      expand: true, 
      flatten: true, 
      cwd: 'src_client/', 
      src: ['**/*.coffee'], 
      dest: 'public/ppalmeida/', 
      ext: '.js' 

Таким образом, в конце концов, я получил что-то вроде этого:

root_folder 
|--- public 
    |--- libs 
    |--- ppalmeida <= here are my .js compiled files from src_client coffeescripts 
      |--- controllers (empty) 
      |--- core (empty) 
      |--- models (empty) 
      |--- Main.js 
      |--- ControllerA.js 
      |--- ControllerB.js 
      |--- ModelA.js 
      |--- all_other_js_files_here.js 


|--- src_client <= here are my .coffee files 
     |--- controllers 
      |--- ControllerA.coffee 
      |--- ControllerB.coffee 
     |--- core 
      |--- Main.coffee 
     |--- models 
      |--- ModelA.coffee 
      |--- ModelA.coffee 

So. Есть ли способ скомпилировать с помощью Contrib-кофе и избежать того, чтобы все js-файлы были помещены в одну папку?

Спасибо всем.

PS: я не знаю, если это поможет, но вот мой полный Gruntfile.coffee:

module.exports = (grunt) -> 

# Grunt config object 
config = 
    pkg: grunt.file.readJSON("package.json") 

    # Grunt must watch the src_client folder for modifications in its files and run coffee task when some file is changed/created 
    watch: 
     coffee: 
      files: 'src_client/**/*.coffee', 
      tasks: ['coffee'] 

    # Create the 'coffee' task, to compile all *.coffee files to *.js 
    coffee: 
     glob_to_multiple: 
      expand: true, 
      flatten: true, 
      cwd: 'src_client/', 
      src: ['**/*.coffee'], 
      dest: 'public/ppalmeida/', 
      ext: '.js' 

# Init grunt with config object 
grunt.initConfig config 

# Load grunt plugins 
grunt.loadNpmTasks 'grunt-contrib-coffee' 
grunt.loadNpmTasks 'grunt-contrib-watch' 

# Register coffee as a default task: 
grunt.registerTask 'default', ['coffee'] 

ответ

9

О, теперь я получил его. Ответ был прямо передо мной: просто изменить «придавить» свойство «ложь», поэтому он будет держать пути к файлам, так CoffeeScript будет компилировать его использование и структура папок хранится:

# Create the 'coffee' task, to compile all *.coffee files to *.js 
coffee: 
    glob_to_multiple: 
     expand: true, 
     flatten: false, #here, it must be false to keep folder structure when compiling 
     cwd: 'src_client/', 
     src: ['**/*.coffee'], 
     dest: 'public/ppalmeida/', 
     ext: '.js' 

Надеюсь, это поможет кому-то. Спасибо.