Grunt文件名作为变量

问题描述 投票:0回答:1

也许我的问题听起来很愚蠢,但我在没有找到答案的情况下到处搜索。

我需要存储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如何处理文件!

编辑:正如所建议的那样,我已经用真实值改变了路径。

我的意思是 :

  1. 有人在我的文件夹中放了一个名为foo.html的文件
  2. 我通过Grunt动态重命名它。 2018_01_02_foo.html
  3. 我需要一个存储全新文件名的变量,或者仅仅是“foo”部分,但不知何故,我可以在其他任务中重用该名称

TNX

variables gruntjs filenames
1个回答
0
投票

您可以执行以下操作:

  1. 在每个Task的外部作用域中声明一个变量,并为其分配一个空数组。例如: var cachedFileNames = [];
  2. 然后在rename任务的copy函数内,使用cachedDirNames方法将每个动态生成的文件名存储在Array.push()数组中。例如: cachedFileNames.push(fileName);
  3. 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' ]);
};
© www.soinside.com 2019 - 2024. All rights reserved.