0

问题第 1 部分:输出到嵌套的动态文件夹

我使用Gulp.js进行图形电子邮件开发。我的雇主正在切换到不同的营销平台,这要求我们的电子邮件模板位于不同的文件夹结构中。当 gulp.src 使用通配符时,我无法输出到嵌套文件夹。感谢您的帮助!

这是 gulp.src 文件夹的简化示例:

build/template1/template1.html
build/template2/template2.html
build/template3/template4.html
build/template4/template4.html

这是 gulp.src 文件夹的简化示例:

build/template1/theme/html/template1.html
build/template2/theme/html/template2.html
build/template3/theme/html/template4.html
build/template4/theme/html/template4.html

我想为动态模板文件夹做通配符之类的事情......

gulp.task('moveFile', function(){
  return gulp.src('./build/*/*.html')
  .pipe(gulp.dest('./build/*/theme/html'));
});

...但通配只适用于 gulp.src。使用全局 gulp.src 时如何输出到动态文件夹?我能得到的最接近的是将 /theme 文件夹放在与模板文件夹相同的级别,而不是根据需要放在每个文件夹中。

感谢您的帮助!

问题第 2 部分:将*重命名的文件*输出到嵌套的动态文件夹

Mark 回答了我的问题(感谢@Mark!),但我过度简化了我的用例,所以我添加了第 2 部分。

除了嵌套文件,我还需要重命名它。(我最初让这部分工作,但不能让这两个部分一起工作。)参考 gulp-rename 文档,我做了 3 次不同的尝试。它是如此接近,但我会感谢更多的帮助。:-)

// ATTEMPT 1: Using gulp-rename mutating function method
gulp.task('createTwig', function(){
  return gulp.src('./build/*/*.html')
    .pipe(rename(
      function (path) {
        path.basename = "email";
        path.extname = ".html.twig";
      },
      function (file) {
        console.log(file.dirname);
        file.dirname = nodePath.join(file.dirname, 'theme/html');
      }
    ))
    .pipe(gulp.dest('./build/'));
});

// ATTEMPT 2: Using gulp-rename fixed object method
gulp.task('createTwig', function(){
  return gulp.src('./build/*/*.html', { base: process.cwd() })
    .pipe(rename(
      {
        basename: "email",
        extname: ".html.twig"
      },
      function (file) {
        console.log(file.dirname);
        file.dirname = nodePath.join(file.dirname, 'theme/html');
      }
    ))
    .pipe(gulp.dest('./build/'));
});

// ATTEMPT 3: Using gulp-rename mutating function method
gulp.task('createTwig', function(){
  return gulp.src('./build/*/*.html')
    .pipe(rename(
      function (path, file) {
        path.basename = "email";
        path.extname = ".html.twig";
        console.log(file.dirname);
        file.dirname = nodePath.join(file.dirname, 'theme/html');
      }
    ))
    .pipe(gulp.dest('./build/'));
});

4

1 回答 1

1

这有效:

const rename = require("gulp-rename");
const path = require("path");


gulp.task('moveFile', function(){
  return gulp.src(['build/**/*.html'])

    .pipe(rename(function (file) {
      console.log(file.dirname);
      file.dirname = path.join(file.dirname, 'theme/html');
    }))

    .pipe(gulp.dest('build'))   // build/template1/theme/html
});

我尝试了几种方法,包括尝试base选项和gulp-flatten使用函数,gulp.dest但这是最简单的。


问题第 2 部分:

gulp.task('createTwig', function(){
  return gulp.src(['build/**/*.html'])

  .pipe(rename(function (file) {

    file.basename = "email";
    file.extname = ".html.twig";
  
    file.dirname = path.join(file.dirname, 'theme/html');
  }))

  .pipe(gulp.dest('build'))   // build/template1/theme/html
});

path.basename/extname只是“吸气剂”,您无法设置这些值。

于 2020-08-21T16:10:14.813 回答