创建用于在目录和子目录中递归编译coffeescript文件的grunt任务

时间:2014-05-27 15:24:20

标签: coffeescript gruntjs grunt-contrib-coffee

我正在尝试创建一个grunt任务,将跨多个文件的coffeescript代码编译为同名的.js文件。我有grunt coffeescript插件,我希望使用此页面上给出的“glob_to_multiple”规范:

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'
  },

但是,这个grunt任务不会将.coffee文件编译为相应名称的.js文件 - 对于目录及其子目录中的所有.coffee文件。我一直在调整这个配置,但我无法做到这一点。请帮忙。

2 个答案:

答案 0 :(得分:7)

模式*.coffee仅匹配.coffee文件夹中以cwd结尾的文件。模式**/*.coffee将匹配.coffeecwd本身的所有子文件夹中递归cwd的所有文件。

尝试以下配置:

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

如果您希望在flatten: true中重新创建文件夹结构而不是将所有文件编译到单个文件夹,也请删除path/to/dest/

答案 1 :(得分:2)

Kyle提供的接受答案与您想要达到的完全相反!

要使其按预期工作,只需设置dest: path/to即可。确保设置flatten: false标志。

使用以下示例,您可以使其正常工作

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

src:[]数组中,您可以放入要抓取的任何根/子目录。您还可以cwd: ''dest: ''抓取整个项目,包括node_modules目录,这只是一个概念验证。所有js文件将在相应咖啡原点所在的完全相同的位置创建。 extDot: 'last'确保myUnitTest.spec.coffee等文件也能得到正确处理。