【发布时间】:2018-01-29 16:47:28
【问题描述】:
使用 gulp 3.9.1
我正在尝试返回一堆文件并执行需要在两个管道之间传递 var 的任务。
- 我正在使用节点 uuid 为每个文件路径创建一个 v3 UUID 最终每个页面都有一个 uuid。我正在使用 gulp-print 获取文件路径。
- 我想将该 uuid 值存储为 var。在下一个管道中,我正在使用 gulp-inject-string 在构建期间将其写入页面。
帮助:要么我需要帮助来获取 gulp-inject-string 管道内的文件路径,要么我需要在两个不同的管道之间传递 var。如果我在 src 之外全局设置一个具有默认值的 var,它很容易传递给管道(注入)。
下面的超级简化代码:
// test code
var gulp = require('gulp');
var print = require('gulp-print');
var inject = require('gulp-inject-string');
var reload = browserSync.reload;
const uuidv3 = require('uuid/v3');
var uuid;
gulp.task('uuid', function() {
return gulp.src('**/*.html'])
// create uuid
.pipe(print(function(filepath) {
uuid = uuidv3(filepath, uuidv3.URL);
return "compiled: " + filepath + ' uuid: ' + uuid;
}))
// need to to add UUIDv3 to each page
.pipe(inject.before('</head>', '<meta name="dc.identifier" content="' + uuid + '">'))
.pipe(gulp.dest('/prod/./'))
.pipe(reload({ stream: true }));
});
值得注意的是,我需要一种跨平台的方式来获取从项目根目录开始并包括正斜杠的文件路径。 gulp(print) 从项目的根开始完美地做到这一点,并忽略该点上游的任何内容。路径的格式很重要,因为它是创建 uuid 的方程式的一半,并且 uuid 必须在 Mac 或 PC 平台上匹配。
例子:
/index.html
/dir1/file.html
/dir1/dir2/dir3/file.html
【问题讨论】:
-
只需在“return gulp.src....”之前声明一个 var,(或完全在任务之前),将其设置在打印管道中并稍后参考。如果您担心正确的斜杠,请查看节点路径库中的 path.sep(以及 path.join)。
-
我不能在 gulp src 之外(或在任务之前)声明 var,因为那样我就不会使用在 src 中返回的文件的文件路径。跨度>
标签: node.js gulp pipe uuid gulp-print