【问题标题】:How to make gulp-newer work with gulp-rev?如何使 gulp-newer 与 gulp-rev 一起工作?
【发布时间】:2015-10-16 18:24:51
【问题描述】:

设置就这么简单:

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)工作?

【问题讨论】:

  • 为什么要结合两个.. gulp-rev 主要用于 prod 部署期间,而 gulp-newer 仅在 dev 期间使用
  • @entre 在我的特定用例中,我绝对需要将两者结合起来。
  • 你能解释一下你的用例吗
  • 只是重复@entre:如果您解释一下您的用例,这将非常有帮助。您是否想使用更新来防止构建或出于其他原因完成不必要的工作? (可能保留旧文件修改日期?)
  • 这个设置是在一个相当大的静态网站上使用的,无缘无故地修改未更改的文件会导致更新数百个 .html 文件,从而使增量构建需要更长的时间,而且 FTP 同步需要更长的时间。

标签: gulp gulp-changed gulp-newer gulp-rev


【解决方案1】:

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

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'));
});

【讨论】:

    【解决方案2】:

    我可以建议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
    }
    

    【讨论】:

    • 谢谢,非常感谢一个工作示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2017-12-01
    相关资源
    最近更新 更多