也许我的问题听起来很愚蠢,但我在没有找到答案的情况下到处搜索。
我需要存储Grunt在变量中操作的文件名,以便能够在其他任务中重用它。
即
copy: {
dist: {
files: [{
expand: true,
cwd: 'tmp/output/',
src: ['*.html'],
dest: 'dist',
rename: function(dest, src) {
var d = new Date();
var mh = d.getMonth() + 1;
var dy = d.getDate();
var yr = d.getFullYear();
return dest + "/" + yr + "_" + mh + "_" + dy + "_" + src;
}
}]
}
}
在这个例子中,我正在重命名附加日期的文件。我需要将生成的文件名存储在变量中,以便在其他任务中重用,最后登录到控制台。
需要一些帮助来了解Grunt如何处理文件!
编辑:正如所建议的那样,我已经用真实值改变了路径。
我的意思是 :
foo.html
的文件2018_01_02_foo.html
TNX
您可以执行以下操作:
var cachedFileNames = [];
rename
任务的copy
函数内,使用cachedDirNames
方法将每个动态生成的文件名存储在Array.push()
数组中。例如:
cachedFileNames.push(fileName);
cachedFileNames
数组中的文件名现在可以在其他任务中重用(如下面的自定义logFileNames
任务所示)。Gruntfile.js
以下Gruntfile.js
要点展示了上述第1-3点:
module.exports = function (grunt) {
var cachedFileNames = []; /* 1. Filenames are dynamically
added via the `copy` task.*/
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
copy: {
dist: {
files: [{
expand: true,
cwd: 'tmp/output/',
src: ['*.html'],
dest: 'dist',
rename: function(dest, src) {
var d = new Date();
var mh = d.getMonth() + 1;
var dy = d.getDate();
var yr = d.getFullYear();
var fileName = yr + "_" + mh + "_" + dy + "_" + src;
cachedFileNames.push(fileName); // 2. Cache each new filename.
return dest + "/" + fileName;
}
}]
}
}
});
// 3. Custom Task to demonstrate the `cachedFileNames`
// array can be accessed via another task.
grunt.registerTask('logFileNames', function() {
cachedFileNames.forEach(function(fileName) {
grunt.log.writeln(fileName);
})
})
grunt.registerTask('default', [ 'copy', 'logFileNames' ]);
};