grunt-contrib-coffee一对一编译

时间:2013-07-23 08:03:04

标签: coffeescript gruntjs

我有几个名为的文件:

  • jquery.a.b.coffee
  • jquery.a.c.coffee
  • jquery.a.d.coffee

并将它们全部编译到输出目录中的一个jquery.js文件中。

虽然我猜这种行为在某些情况下可能会很好,但我想让它们编译成不同的文件,如jquery.a.b.jsjquery.a.c.js等等。我怎么能告诉grunt-contrib-coffeescript呢?

我的Gruntfile.js看起来像这样:

module.exports = function (grunt) {
    grunt.initConfig({
        coffee: {
          dist: {
            files: [{
              expand: true,
              flatten: true,
              cwd: 'app/webroot/coffee',
              src: ['{,*/}*.coffee'],
              dest: 'app/webroot/js',
              ext: '.js'
            }]
          }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-coffee');

};

感谢您的帮助!

2 个答案:

答案 0 :(得分:10)

问题在于有多个点的文件名 如果它是 jquery-a-b.coffee jquery-a-c.coffee 等,你会看到预期的输出。

这是一个众所周知的issue(扩展仅在上一个时期之后),而咕噜咕噜的开发人员故意这样做。
以下是其中一个的引用:

  

分机有两种方式可以工作;它可以考虑之后的一切   第一个点是扩展名,或者是最后一个点后面的所有内容   延期。我们选择前者是因为用例更常见(我们   一直遇到.min.js文件)。话虽这么说,你可以使用   重命名选项,用于指定将使用任何自定义的函数   你需要的命名逻辑。

因此,目前唯一的解决方法是删除ext并使用rename,如下所示:

coffee: {
  dist: {
    files: [{
      expand: true,
      cwd: 'app/webroot/coffee',
      src: ['{,*/}*.coffee'],
      dest: 'app/webroot/js',
      rename: function(dest, src) {
        return dest + '/' + src.replace(/\.coffee$/, '.js');
      }
    }]
  }
}

自Grunt 0.4.3起更新
您现在可以使用extDot optionext

ext: '.js',
extDot: 'last'

答案 1 :(得分:3)

这样可以让您无需在gruntFile中手动添加文件:

coffee: {
    glob_to_multiple: {
    expand: true,
    flatten: true,
    cwd: 'app/webroot/coffee/',
    src: ['*.coffee'],
    dest: 'app/webroot/',
    ext: '.js'
    }
},
  1. cwd :您的文件所在的文件夹
  2. src :您的文件的匹配模式,使用glob
  3. dest :文件所在的文件夹。
  4. 有关示例用法,请参阅https://github.com/gruntjs/grunt-contrib-coffee#usage-examples