代码之家  ›  专栏  ›  技术社区  ›  Luca Ricci

Grunt文件名作为变量

  •  0
  • Luca Ricci  · 技术社区  · 7 年前

    也许我的问题听起来很傻,但我到处都找不到答案。

    我需要在变量中存储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. 我在ie中通过Grunt动态重命名了它。 2018_01_02_foo.html
    3. 我需要一个存储全新文件名的变量,或者只是“foo”部分,但不知何故,我可以在其他任务中重用该名称

    TNX公司

    1 回复  |  直到 6 年前
        1
  •  0
  •   RobC Manuel Gonzalez    7 年前

    您可以执行以下操作:

    1. 在每个任务的外部作用域中声明一个变量,并为其分配一个空数组。例如:

      var cachedFileNames = [];
      
    2. 然后在 rename 的功能 copy 任务中,将每个动态生成的文件名存储在 cachedDirNames 通过利用 Array.push() 方法例如:

      cachedFileNames.push(fileName);
      
    3. 中的文件名 cachedFileNames 阵列现在可以在其他任务中重用 (如自定义 logFileNames 以下任务) .


    Grunfile文件。js公司

    以下内容 Gruntfile.js gist说明了上述第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' ]);
    };