Вы можете динамически создавать объект файлов (вместо использования формата объектов файлов , который используется в настоящее время) и использовать переименовывать * 1006.* свойство для создания нового пути назначения для каждого результирующего .css
файла.
Вместо этого вместо свойства files
укажите следующее:
files: [{
expand: true,
cwd: 'resources',
src: ['**/*.scss'],
dest: 'resources/', // <-- Value must match `cwd` value and
// include trailing forward slash.
ext: '.css',
rename: function(dest, src) {
var parts = src.split('/');
parts.splice(1, 1, 'css');
return dest + parts.join('/');
}
}]
Объяснение:
В теле функции rename
мы сначала разбиваем путь src
на массив через строку, которая гласит:
var parts = src.split('/');
В вашем примереисходный путь 'resources/clients-1/scss/style.scss'
, это приведет к массиву, назначенному переменной parts
, например:
['clients-1', 'scss', 'style.scss']
Затем мы используем splice()
в следующей строке:
parts.splice(1, 1, 'css');
Заменяет значение с индексом 1 (т. е. 'scss'
) на заданное значение 'css'
.Массив parts
теперь приводит к следующему:
['clients-1', 'css', 'style.scss']
Наконец, через строку, которая гласит:
return dest + parts.join('/');
Мы возвращаем из функции новую строкудля пути dest
.Учитывая предыдущий пример, путь dest
будет таким:
'resources/clients-1/css/style.css'
Поскольку свойство ext
имеет значение .css
, grunt заменяет исходное имя расширения .scss
на .css
.
Примечание:
Если в папке resources
есть подпапки, содержащие .scss
файлов, которые вы не хотите сгенерировать файл .css
, так как вам нужно будет отменить его, используя шаблон сглаживания .Например, предположим, что ваша директория resources
выглядит следующим образом:
.
├── resources
│ ├── clients-1
│ │ └── scss
│ │ └── style.scss
│ ├── clients-2
│ │ └── scss
│ │ └── style.scss
│ ├── foo
│ │ └── scss
│ │ └── style.scss
│ └── quux
│ └── scss
│ └── style.scss
└── ...
И, скажем, вам не нужны файлы .css
, созданные для файлов .scss
, которые существуют в папках foo
и quux
, (т.е. вы хотите обрабатывать только папки clients-1
и clients-2
).
В такой ситуации вам необходимо изменить свойство src
в приведенном выше примере кода на:
src: ['{,!(foo|quux)/**/}*.scss'],