【问题标题】:How to fetch current filename that is being processed using gulp.src()如何获取正在使用 gulp.src() 处理的当前文件名
【发布时间】:2019-03-27 07:10:45
【问题描述】:

我必须对文件夹中的多个 json 文件运行某些 gulp 任务,但该任务会根据文件名获取不同位置的文件。

我可以通过在 cmd 中将文件名作为参数传递来运行任务,但我想自动化脚本,以便为 src 位置中的所有文件执行它。

gulp.task("writeJSON", function() {
    dataObj = require("./src/data/" + argv["filename"] + ".json");
    dataObjKeysList = require("./src/data/stats/" + argv["filename"] + ".json");
    segregateData(dataObj, dataObjKeysList, tabspace, false);
    gulp
      .src("./src/metadata.html")
      .pipe(rename(argv["filename"] + ".html"))
      .pipe(gulp.dest("./src/output"));
  });

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript gulp task-runner-explorer


    【解决方案1】:

    我能够使用节点文件流解决上述问题。我发现这篇有用的文章

    Filewalker Source

    使用下面的实用函数,它以目录路径和回调为参数。

      function filewalker(dir, done) {
          let results = [];
    
          fs.readdir(dir, function(err, list) {
              if (err) return done(err);
    
              var pending = list.length;
    
              if (!pending) return done(null, results);
    
              list.forEach(function(file){
                  file = path.resolve(dir, file);
    
                  fs.stat(file, function(err, stat){
                      // If directory, execute a recursive call
                      if (stat && stat.isDirectory()) {
                          // Add directory to array [comment if you need to remove the directories from the array]
                          results.push(file);
    
                          filewalker(file, function(err, res){
                              results = results.concat(res);
                              if (!--pending) done(null, results);
                          });
                      } else {
                          results.push(file);
                          if (!--pending) done(null, results);
                      }
                  });
              });
          });
      };
    

    在我的 gulp 任务中添加了以下执行

    filewalker("./src/data/stats/" , function(err, dataFilesList){
            if(err){
                throw err;
            }
            dataFilesList.map((name) => {
                let fileName = path.basename(name); 
                fileName = fileName.split('.')[0];
                gutil.log('Generating ' + fileName + '.html file.');
           });
        });
    

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 2014-12-09
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多