更多gulp經常使用插件使用請訪問:gulp經常使用插件彙總css
gulp-rev-collector這是一款根據gulp-rev
生成的manifest.json
文件中的映射, 去替換文件名稱, 也能夠替換路徑。html
更多使用文檔請點擊訪問gulp-rev-collector工具官網。html5
一鍵安裝很少解釋npm
npm install --save-dev gulp-rev-collector
咱們可使用gulp-rev
來緩存破壞多個資產併爲其生成清單文件。而後,使用gulp-rev-collector
,咱們能夠從幾個清單文件中收集數據,並替換html模板中資產的連接。json
例子1:gulp
var gulp = require('gulp'); var rev = require('gulp-rev'); gulp.task('css', function () { return gulp.src('src/css/*.css') .pipe(rev()) .pipe(gulp.dest('dist/css')) .pipe( rev.manifest() ) .pipe( gulp.dest( 'rev/css' ) ); }); gulp.task('scripts', function () { return gulp.src('src/js/*.js') .pipe(rev()) .pipe(gulp.dest('dist/js')) .pipe( rev.manifest() ) .pipe( gulp.dest( 'rev/js' ) ); }); ... var revCollector = require('gulp-rev-collector'); var minifyHTML = require('gulp-minify-html'); gulp.task('rev', function () { return gulp.src(['rev/**/*.json', 'templates/**/*.html']) .pipe( revCollector({ replaceReved: true, dirReplacements: { 'css': '/dist/css', '/js/': '/dist/js/', 'cdn/': function(manifest_value) { return '//cdn' + (Math.floor(Math.random() * 9) + 1) + '.' + 'exsample.dot' + '/img/' + manifest_value; } } }) ) .pipe( minifyHTML({ empty:true, spare:true }) ) .pipe( gulp.dest('dist') ); });
例子2:緩存
gulp.task('scripts5', () => { return gulp.src('app/scripts/**/*.js') .pipe($.plumber()) .pipe($.sourcemaps.init()) .pipe($.babel()) .pipe($.rev())//- 文件名加MD5後綴 .pipe($.sourcemaps.write('.')) .pipe(gulp.dest('.tmp/scripts')) .pipe($.rev.manifest()) //- 生成一個rev-manifest.json .pipe(gulp.dest('.tmp/rev/scripts')) //- 將 rev-manifest.json 保存到 rev 目錄內 .pipe(reload({stream: true})); }); gulp.task('html5', ['styles5', 'scripts5'], () => { return gulp.src(['.tmp/rev/**/*.json', 'app/*.html'])//獲取rev-manifest.json和要替換的html文件 .pipe($.revCollector({replaceReved: true}))//根據rev-manifest.json的規則替換html裏的路徑,因爲替換是根據rev-manifest.json規則來的,因此必定要先生成這個文件再進行替換 .pipe($.useref({searchPath: ['.tmp', 'app', '.']})) .pipe($.if('*.js', $.uglify())) .pipe($.if('*.css', $.cssnano({safe: true, autoprefixer: false}))) .pipe($.if('*.html', $.htmlmin({collapseWhitespace: false}))) .pipe(gulp.dest('dist'));
** Options :**babel
collectedManifest
類型 : String
它是json
格式爲收集和合並清單數據的文件名。app
replaceReved
類型 : Boolean
默認值: false
您設置一個標記replaceReved
,它將替換模板文件中已被替換的連接。less
dirReplacements
Object
gulp-rev
建立清單文件,但不包含有關目錄的任何信息。例如,若是您使用「上面的例子1」示例中的dirReplacements
參數,則會獲得下一個替換:"/css/style.css" => "/dist/css/style-1d87bebe.css" "/js/script1.js" => "/dist/script1-61e0be79.js" "cdn/image.gif" => "//cdn8.example.dot/img/image-35c3af8134.gif"
revSuffix
類型: String
它是用於定義修訂文件後綴的模式。默認值爲「-[0-9a-f] {8,10}-?」。在使用gulp-rename
的狀況下,這是必需的。若是修訂的文件名與默認掩碼不一樣。
extMap
Object
gulp-rev
以後使用某些方法修改rev_manifest.json
並獲得以下結果:{ "assets/less/common.less": "assets/css/common-2c0d21e40c.css" }
這意味着rev_manifest.json
中的鍵和值具備不一樣的ext:less&css。
您能夠定義擴展區映射規則以正確處理清單文件。
默認值爲:
{ '.scss': '.css', '.less': '.css', '.jsx': '.js' }