如何在Drupal 8中使用通配符在几个目录上运行grunt sass

时间:2016-11-10 22:36:35

标签: drupal gruntjs drupal-8 grunt-sass-lint

在我的Drupal 8项目中我有自定义模块,其中每个主题我有两个目录scss和css,所以结构如下:

- modules
  - custom
    - my_module_1
      - scss
      - css
    - my_module_2
      - scss
      - css
- themes
  - my_theme
    - Gruntfile.js

在我的Gruntfile.js中我想告诉sass通过每个自定义模块并在scss文件夹上作为源运行,而css文件夹应该是目标。

到目前为止,我的任务如下:

  sass: {
    prod:{
      options: {
        sourceMap: false,
        outputStyle: 'compressed',
        includePaths: ['scss']
      },
      files: {
        '../../modules/custom/my_module_1/css/file1.css': '../../modules/custom/my_module_1/scss/file1.scss',
        '../../modules/custom/my_module_1/css/file2.css': '../../modules/custom/my_module_1/scss/file2.scss',
        '../../modules/custom/my_module_2/css/file1.css': '../../modules/custom/my_module_2/scss/file1.scss'
      }
    }
  }

因为你可以看到它是多余的,如何在一个通用命令中使它更清晰(可能使用通配符,但我还无法解决这个问题)

感谢。

1 个答案:

答案 0 :(得分:1)

以防有人在将来寻找相同的答案。

我最终用expand以下列方式解决了它:

sass: {
  prod:{
    options: {
      sourceMap: false,
      outputStyle: 'compressed',
      includePaths: ['scss']
    },
    files: {
      expand: true,
      src: ['../../modules/custom/*/scss/*.scss'],
      dest: '/css',
      rename: function(dest, src){
        var fname = src.substring(src.lastIndexOf('/'),src.lastIndexOf('.'));
        return src.substring(0, src.lastIndexOf('/scss')) + dest + fname + '.css';
      },
      ext: '.css'
    }
  }
}