Хорошо, я застрял на этом в течение 2 недель, так что, надеюсь, кто-то другой столкнулся с этой проблемой. Я пытаюсь использовать Grunt для копирования только файлов, которые были изменены. Я видел многочисленные примеры того, как это сделать с JSLINT и UGLIFY, но нет конкретных примеров того, как это сделать с помощью grunt-contrib-copy.Событие Grunt Watch с грубым копированием только для измененных файлов
Когда вы регистрируете событие просмотра и передаете имя файла в подзадачу копирования, имя файла доступно (я его выхожу), но файл никогда не копируется правильно.
Я надеюсь, что это простая вещь, с которой я не обращаю внимания. Может кто-нибудь, пожалуйста, взгляните на мой код и посмотрите, что я делаю неправильно?
//Gruntfile.js:
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
options: {
base: 'app',
dist: 'dist',
},
copy: {
changedFiles: {
expand: true,
dot: true,
cwd: '<%= options.base %>',
src: ['**/*.*'],
dest: '<%= options.dist %>/'
}
},
watch: {
options: {
nospawn: true,
//debounceDelay: 1000,
},
css: {
files: ['app/css/*.css',
'app/js/*.js'
],
tasks: ['copy:changedFiles'],
}
}
});
grunt.event.on('watch', function(action, filepath, target){
grunt.log.writeln('target: ', target + '\n filepath: ' + filepath + '\n action: has ' + action);
grunt.config('copy.changedFiles.src', new Array(filepath));
});
//load our copy task
grunt.loadNpmTasks('grunt-contrib-copy');
//load our watch task
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('copyChangedFiles', [
'watch:css'
]);
};
В основном моя установка папки как таковой:
-app
| - css
| - js
-dist
Я смотрю папку приложения и пытается копировать файлы, которые изменяются в каталоге приложения и скопировать их в DIST каталог. Динамическое изменение копии src, похоже, не работает.
Задача копирования при запуске сама по себе с часами, а не на часах, работает нормально и копирует все файлы, но меня интересует копирование только файлов, которые меняются.
Я также попытался вариацию это в моем случае часов, но безрезультатно:
var copyDest = filepath.replace(grunt.config('copy.changedFiles.dest'), '');
var copyCwd = filepath.replace(grunt.config('copy.changedFiles.cwd'), '');
grunt.config('copy.changedFiles.cwd' , copyCwd);
grunt.config(['copy', 'changedFiles', 'src'] , [filepath]);
Кто-нибудь успешно сделал это, прежде чем использовать черновую копию? Или есть еще одна задача, которую я должен использовать? Я пробовал то же самое с grunt-sync, и это тоже не сработало. Я застрял.
Спасибо за помощь.