Grunt 文件名作为变量
Grunt filename as variable
也许我的问题听起来很傻,但我到处搜索都没有找到答案。
我需要存储 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
的文件
- 我在 ie 中通过 Grunt 动态重命名了它。
2018_01_02_foo.html
- 我需要一个存储全新文件名的变量,或者只是 "foo" 部分,但不知何故让我能够在其他任务中重用该名称
TNX
您可以执行以下操作:
在每个Task的外部范围内声明一个变量,并为其分配一个空数组。例如:
var cachedFileNames = [];
然后在copy
任务的rename
函数中,利用Array.push()
方法将每个动态生成的文件名存储在cachedDirNames
数组中.例如:
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' ]);
};
也许我的问题听起来很傻,但我到处搜索都没有找到答案。
我需要存储 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
的文件 - 我在 ie 中通过 Grunt 动态重命名了它。
2018_01_02_foo.html
- 我需要一个存储全新文件名的变量,或者只是 "foo" 部分,但不知何故让我能够在其他任务中重用该名称
TNX
您可以执行以下操作:
在每个Task的外部范围内声明一个变量,并为其分配一个空数组。例如:
var cachedFileNames = [];
然后在
copy
任务的rename
函数中,利用Array.push()
方法将每个动态生成的文件名存储在cachedDirNames
数组中.例如: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' ]);
};