jjs*_*red 5 workflow gruntjs grunt-contrib-watch grunt-contrib-copy
好吧,我已经坚持了两个星期,所以希望这里的其他人遇到过这个问题.我正在尝试使用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'
]);
};
Run Code Online (Sandbox Code Playgroud)
基本上我的文件夹设置如下:
-app
| - css
| - js
-dist
Run Code Online (Sandbox Code Playgroud)
我正在观看app文件夹并尝试复制app目录中更改的文件并将其复制到dist目录.动态修改副本src似乎不起作用.
使用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]);
Run Code Online (Sandbox Code Playgroud)
有没有人在使用grunt副本之前成功完成此操作?或者我应该使用另一项任务?我尝试了同样的grunt-sync,但似乎也没有用.我被卡住了.
谢谢您的帮助.
我能够使用这个答案:How to edit grunt watchtasks based on the filechanged? 并修改它以满足我的需要。我现在只能复制已更改的文件。
我的手表现在看起来像这样:
var path = require('path');
grunt.event.on('watch', function(action, filepath, target){
grunt.log.writeln(target + ': ' + filepath + ' might have ' + action);
var siteDirectory = path.dirname(filepath);
//changes changed file source to that of the changed file
var option = 'copy.changedFiles.src';
var result = filepath;
grunt.log.writeln(option + ' changed to ' + result);
grunt.config(option, result);
//customizes output directory so that file goes to correct place
option = 'copy.changedFiles.dest';
result = path.resolve(__dirname + '/dist');
grunt.log.writeln(option + ' changed to ' + result);
grunt.config(option, result);
});
Run Code Online (Sandbox Code Playgroud)
现在运行grunt copyChangedFiles将监视应用程序目录的更改,并且任何时候修改*.css或*.js文件时,它都会将其复制到该dist目录。
我真的希望这对其他人有帮助,因为我花了两周时间让它正常工作。
| 归档时间: |
|
| 查看次数: |
3969 次 |
| 最近记录: |