【问题标题】:Creating grunt tasks for compiling coffeescript files recursively inside directories and subdirectories创建用于在目录和子目录中递归编译咖啡脚本文件的 grunt 任务
【发布时间】:2014-07-16 14:16:37
【问题描述】:

我正在尝试创建一个 grunt 任务来将分布在多个文件中的咖啡脚本代码编译为同名的 .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'
  },

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

【问题讨论】:

    标签: coffeescript gruntjs grunt-contrib-coffee


    【解决方案1】:

    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 这样的文件也将得到正确处理。

    【讨论】:

      【解决方案2】:

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

      尝试以下配置:

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

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

      【讨论】:

      • 那部分有效。但它会在一个目录中创建所有 .js 文件,而不是在与源 .coffee 文件相同的目录中创建它们。如果有多个具有相同名称的文件(例如<filename>.coffee),那么它会在名为<filename>.js 的输出目录中为这两个文件创建一个通用的js 文件,并将具有通用名称的.coffee 文件连接到一个文件中在名为<filename>.src.js 的目标目录中。我想要的只是为每个 .coffee 文件生成一个 .js 文件