Настройка задачи копирования grunt для исключения файлов/папок
Я установил задачу grunt grunt-contrib-copy
. Я вставляю его в свой Gruntfile.js
и загружаю задачу через grunt.loadNpmTasks('grunt-contrib-copy');
.
В настоящее время я использую следующую конфигурацию для создания папки с подмножеством моих js файлов/папок.
copy: {
options: {
processContent: [],
processContentExclude: ['build/**', 'bin/**', '.*', '*.orig', '*.bak', '.*/**', '*.log', 'dist/**', 'test/**', 'dev/**', 'pyserver/**', 'node_modules/**', 'doc/**']
},
du: {
files: [
{src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
]
}
}
Это отлично работает, но каждый раз, когда я запускаю grunt-копию, он выходит со следующим сообщением об ошибке:
Copying Gruntfile.js -> output/Gruntfile.js
Warning: Error while processing "Gruntfile.js" file. Use --force to continue.
Я хотел бы исключить Gruntfile.js
и все *.less
файлы в js/**/*
. Пробовал это с помощью !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js)
... Но ничего не работает. Добавил его в массив processContentExclude
, но без успеха тоже.
Итак, как я могу исключить Gruntfile.js
и все меньше файлов в структуре папок js/**/*
?
Ответы
Ответ 1
Найдено решение:
Нет необходимости в этих строках:
files: [
{src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
]
потому что {expand: true, cwd: './', src: ['**'], dest: 'output/'}
- это новый шаг копирования, копируя все файлы с ./
до output
. Это для меня не нужно, потому что указанные выше строки уже копируют необходимые файлы в output/toolkit
.
Итак, следующие две строки выполняют эту работу. Нет необходимости в вариантах или что-то еще. Для сохранения *.less
файлов '!**/*.less'
выполняется задание.
files: [
{src: ['.conf1', '.conf2', 'config.js'], dest: 'output/toolkit/', filter: 'isFile'},
{src: ['css/**', 'img/**', 'js/**', 'release/**', 'lib/**', 'locale/**', '!**/*.less'], dest: 'output/toolkit/'}
]
Ответ 2
Я хотел исключить все .gz файлы в свою копию, и эти параметры выполнили задание для всех папок
{
expand: true,
cwd: './build/www/',
src: [ '**', '!**/*.gz' ],
dest: './mydDest'
}
Итак, можно попробовать !**/*.less, !gruntfile.js
(no parens)
Ответ 3
Если у вас есть свобода, чтобы перейти к другой задаче Grunt:
Существует также https://github.com/clavery/grunt-copy-to, у которого есть явная опция "игнорировать", чтобы указать файлы и каталоги для пропусков. README в Github показывает пример конфигурации, включая опции игнорирования.
Он немного отличается от обычной копии, поскольку он соблюдает время модификации. Но это может быть действительно приветствуется (это было в моем случае).
Из README:
Подобно grunt-contrib-copy, но только копирует файлы, которые новее, и поддерживает измененные времена для скопированных файлов. Полезно для создания каталогов сборки, которые могут быть позже синхронизированы с использованием инструментов, которые зависят от времени, измененного файлом.
(Я только пользователь этого проекта (по крайней мере до сих пор).)
Ответ 4
Предполагая, что "Gruntfile.js" находится в корневом каталоге, последняя строка в ваших параметрах копирования настраивает его, чтобы скопировать все в корневом каталоге в 'output/'.
Если это необходимо, добавьте '! Gruntfile.js' в ваш массив путей файла src.
{
expand: true,
cwd: './',
src: ['**'], // ex. src: ['**', '!Gruntfile.js'],
dest: 'output/'
}
Обратитесь к этим решениям из этого потока и исходного потока
Ответ 5
Я считаю, что это должно сделать это. Не требуется для /**/*
. /**
охватывает все файлы в пути и его поддиректории
{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}