将 Grunt 输出指定到动态并行文件夹

Specifying Grunt output to a dynamic parallel folder

背景

我是 Grunt 的新手,正在尝试通过修改 meanjs boilerplate to support stylus 来学习一些东西,我想按照当前meanjs 默认值。

问题

我有以下文件结构:

- 应用程序
- 配置
- public
 - 模块
  - 富
   - 资产
    - 样式表
    ...
   - css
   ...
...

如何使用 Grunt 获取 public/modules/*/assets/stylesheets 目录中的 Stylus .styl 文件,并将它们编译到 public/modules/*/css 目录?

天真的尝试:

下面是一个示例尝试,并没有走得太远。

手写笔:{
  编译:{
    文件:[{
      dest: '../../css',
      来源:'public/modules/*/assets/stylesheets/*.styl',
      ext: '.css',
      展开:真
    }]
  }
}

这导致:File ../../css/public/modules/foo/assets/stylesheets/baz.css created.

如果我将 "dest" 留空,它会正确编译,但输出位于 assets/stylesheets 文件夹中(如预期的那样)。我确定有一种干净的方法可以做到这一点,但我还不知道。

设置 src、dest、cwd 以及使用 grunt 的隐藏重命名选项应该会获得所需格式的手写笔文件。

示例:

stylus: {
  compile: {
    options: {
      compress: true
    },
    files: [{
      cwd: 'public/modules',
      dest: 'public/modules',
      src: ['*/assets/stylesheets/*.styl'],
      expand: true,
      rename: function(dest, src) {
        var path = require('path');
        var module = src.split(path.sep).slice(0,1)[0];
        return path.join(dest, module + '/css/' + module + '.css');
      }
    }]
  }
},

grunt tricks - customize file output rename