好的,我已经在这个问题上卡了两周了,所以希望这里有其他人遇到过这个问题。我正在尝试使用Grunt仅复制已更改的文件。我看到了许多如何使用JSLINT和UGLIFY做到这一点的示例,但没有关于如何使用grunt-contrib-copy做到这一点的具体示例。
当您注册观察事件并将文件名传递给复制子任务时,文件名是可访问的(我正在将其记录输出),但文件从未正确复制过来。
我希望这只是一个简单的事情,我正在忽略它。请有人查看我的代码并看看我做错了什么吗?
//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
我正在监视app文件夹并尝试复制在app目录中更改的文件并将它们复制到dist目录。动态修改复制源似乎不起作用。
仅使用watch运行复制任务而不在watch事件上运行时,它可以正常工作并复制每个文件,但我只想复制更改的文件。
我还尝试了watch事件中的这种变化,但没有成功:
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 copy成功地完成过这个操作?或者我应该使用另一个任务?我已经尝试使用grunt-sync,但似乎也不起作用。我卡住了。
谢谢你的帮助。