Gulp Rev不包括我的清单文件中的path

我将Gulp任务设置为一次性连接,缩小和指纹资源,直接写入我的资产文件夹:

(css部分)

gulp.task('styles:cssmin', function(){ return gulp.src('src/css/*.css') .pipe(concat('main.css')) // combine them .pipe(cssmin()) // minify them .pipe(rev()) // Pipe through gulp-rev to fingerprint generated file .pipe(gulp.dest('assets/css')) // write rev'd assets .pipe(rev.manifest({ merge: true // Merge because this happens for .js and images too })) .pipe(gulp.dest('./')); // write manifest }); 

这个指纹文件和生成清单,但我不能得到任何path被保存到清单文件。 这是它产生的清单:

 { "bg.jpg": "bg-447ac2238b.jpg", "logo.png": "logo-e31e139d4d.png", "main-min.js": "main-min-cc3a682299.js", "main.css": "main-ea0d06582f.css", "main.js": "main-35ec0bb3c8.js" } 

我想要的是:

 { "assets/img/bg.jpg": "assets/img/bg-447ac2238b.jpg", "assets/img/logo.png": "assets/img/logo-e31e139d4d.png", "assets/js/main-min.js": "assets/js/main-min-cc3a682299.js", "assets/css/main.css": "assets/css/main-ea0d06582f.css", "assets/jsg/main.js": "assets/js/main-35ec0bb3c8.js" } 

特别是考虑到文档给出了一个包含相对path的例子

我遇到了同样的问题,并最终将stream中的资产目录重命名为我想要的,并指定了rev-manifest的path。

 var rename = require("gulp-rename"); gulp.task('styles:cssmin', function(){ return gulp.src('src/css/*.css') .pipe(concat('main.css')) // combine them .pipe(cssmin()) // minify them .pipe(rename({ dirname: "assets/css" //manually fixing path for rev-manifest })) .pipe(rev('path/to/your/rev/rev-manifest.json')) // Specify manifest location .pipe(gulp.dest('assets/css')) // write rev'd assets .pipe(rev.manifest({ merge: true // Merge because this happens for .js and images too })) .pipe(gulp.dest('./')); // write manifest }); 

我最终不得不编辑源代码。 在那里注明,对不起,我不能突出显示它。

 plugin.manifest = function (pth, opts) { if (typeof pth === 'string') { pth = {path: pth}; } opts = objectAssign({ path: 'rev-manifest.json', merge: false }, opts, pth); // Changed the following line to the next line: // var firstFileBase = null var firstFileBase = opts.base || null; var manifest = {}; return through.obj(function (file, enc, cb) { // ignore all non-rev'd files if (!file.path || !file.revOrigPath) { cb(); return; } firstFileBase = firstFileBase || file.base; var revisionedFile = relPath(firstFileBase, file.path); var originalFile = path.join(path.dirname(revisionedFile), path.basename(file.revOrigPath)).replace(/\\/g, '/'); manifest[originalFile] = revisionedFile; cb(); }, function (cb) { // no need to write a manifest file if there's nothing to manifest if (Object.keys(manifest).length === 0) { cb(); return; } getManifestFile(opts, function (err, manifestFile) { if (err) { cb(err); return; } if (opts.merge && !manifestFile.isNull()) { var oldManifest = {}; try { oldManifest = JSON.parse(manifestFile.contents.toString()); } catch (err) {} manifest = objectAssign(oldManifest, manifest); } manifestFile.contents = new Buffer(JSON.stringify(sortKeys(manifest), null, ' ')); this.push(manifestFile); cb(); }.bind(this)); }); }; 

不是一个理想的解决scheme,会打破更新。 如果有更好的方法,我会喜欢它。