gpt4 book ai didi

gruntjs - 带有 Grunt Copy 的 Grunt Watch 事件,仅用于更改的文件

转载 作者:行者123 更新时间:2023-12-04 21:14:45 24 4
gpt4 key购买 nike

好的,我已经被困在这个问题上 2 周了,所以希望这里的其他人已经遇到了这个问题。我正在尝试使用 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 目录。动态修改副本 src 似乎不起作用。

使用 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 尝试过同样的方法,但似乎也没有用。我被困住了。

谢谢您的帮助。

最佳答案

您应该可以使用 grunt-newer包裹。我注意到的唯一一件事是,如果文件从源中删除并且当前位于副本的目标中,则它不会执行删除操作。

但是,对于大多数用途,这应该执行您正在寻找的任务。 Watch 将在文件更改时触发,仅当目标中的文件早于 src 时才运行较新的文件。 .

注:nospawn已弃用,现在是 spawn .它是为了向后兼容而留下的。

我不确定这对文件是否有意义:[<pattern>]不匹配 src复制任务中描述的模式。

module.exports = function(grunt) {
grunt.initConfig({
options: {
base: 'app',
dist: 'dist',
},
copy: {
changedFiles: {
expand: true,
dot: true,
cwd: '<%= options.base %>',
src: ['**/*.*'],
dest: '<%= options.dist %>/'
}
},
watch: {
options: {
//nospawn is depricated but kept for compatibility. use spawn false instead
spawn: false,
cwd: '<%= options.base %>'
//debounceDelay: 1000,
},
css: {
//should match above
files: ['**/*.*'],
//On new file detection run copy:changedFiles
tasks: ['newer:copy:changedFiles']
}
}
});

grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-newer');

grunt.registerTask('copyChangedFiles', ['watch:css']);

};

关于gruntjs - 带有 Grunt Copy 的 Grunt Watch 事件,仅用于更改的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com