4

设置很简单:

gulp.task('rev-js',  function() {
  return gulp.src('/js/main.js, {base: '.'})
      .pipe(newer('_build'))
      .pipe(rev())
      .pipe(gulp.dest('_build'))
      .pipe(rev.manifest())
      .pipe(gulp.dest('_build/rev/js'));
});

gulp-newer 显然在这里不起作用,因为目标文件的名称不同。在这种情况下,任何使 gulp-newer(或 gulp-changed)工作的解决方法?

4

2 回答 2

1

在 gulp-newer选项文档中,我读到它支持传入配置对象而不是目标。在该配置对象中,您可以指定从旧文件到新文件的映射函数。所以而不是

newer('_build')

你可以写

newer({dest: '_build', map: mappingFn})

映射函数采用文件的相对名称并期望它返回翻译后的名称 - 请参阅index.js文件。您可以定义一个函数,该函数使用先前生成的rev-manifest.json清单来查找正确的文件名。我在你的构建脚本中放了一些东西(未经测试):

gulp.task('rev-js',  function() {

  // get the existing manifest
  // todo: add logic to skip this if file doesn't exist
  var currentManifest = JSON.parse(fs.readFileSync('rev-manifest.json', 'utf8'));

  // mapping function for gulp-newer
  function mapToRevisions(relativeName) {
    return currentManifest[relativeName]
  }

  return gulp.src('/js/main.js, {base: '.'})
      .pipe(newer({dest: '_build', map: mapToRevisions}))
      .pipe(rev())
      .pipe(gulp.dest('_build'))
      .pipe(rev.manifest())
      .pipe(gulp.dest('_build/rev/js'));
});
于 2015-08-06T09:43:04.520 回答
1

我可以建议gulp-newy在其中您可以在自己的函数中操作路径和文件名。然后,只需将该函数用作newy(). 这使您可以完全控制要比较的文件。

这将允许 1:1 或多对 1 比较。

newy(function(projectDir, srcFile, absSrcFile) {
  // do whatever you want to here. 
  // construct your absolute path, change filename suffix, etc. 
  // then return /foo/bar/filename.suffix as the file to compare against
}

在此处输入图像描述

于 2015-10-09T20:28:57.957 回答