J'utilise gulp-rev pour créer des fichiers statiques que je peux définir n'expire jamais . J'aimerais remplacer toutes les références aux fichiers générés dans index.html par ces fichiers renommés, mais je n'arrive pas à trouver quoi que ce soit comme Grunt avec usemin.
Pour autant que je sache, j'ai quelques options.
Des idées? Je ne vois pas pourquoi ce petit cas d'utilisation devrait être la seule chose à faire pour remplacer Grunt.
Plutôt que d'essayer de résoudre ce problème en plusieurs étapes de gorgée (ce que gulp-rev semble vouloir que vous fassiez), j'ai bifurqué gulp-rev vers gulp-rev-all pour résoudre ce cas d'utilisation en une seule gorgée brancher.
Pour mon utilisation personnelle, je voulais absolument tout réviser, mais comme quelqu'un d'autre a soulevé une demande de fonctionnalité, il devrait être possible d'exclure certains fichiers comme index.html. Cela sera bientôt mis en œuvre.
Je viens d'écrire un plugin gulp pour ce faire, cela fonctionne particulièrement bien avec gulp-rev et gulp-useref.
L'utilisation dépendra de la façon dont vous avez configuré les choses, mais elle devrait ressembler à:
gulp.task("index", function() {
var jsFilter = filter("**/*.js");
var cssFilter = filter("**/*.css");
return gulp.src("src/index.html")
.pipe(useref.assets())
.pipe(jsFilter)
.pipe(uglify()) // Process your javascripts
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe(csso()) // Process your CSS
.pipe(cssFilter.restore())
.pipe(rev()) // Rename *only* the concatenated files
.pipe(useref.restore())
.pipe(useref())
.pipe(revReplace()) // Substitute in new filenames
.pipe(gulp.dest('public'));
});
J'ai rencontré le même problème, j'ai essayé gulp-rev-all, mais il a un problème de chemin, pas très libre à utiliser.
Donc, je trouve une solution, utilisez gulp-rev et gulp-replace :
Au début, j'ai un symbole de remplacement dans mes fichiers html (js, css)
<link rel="stylesheet" href="{{{css/common.css}}}" />
<script src="{{{js/lib/jquery.js}}}"></script>
dans les fichiers css
background: url({{{img/logo.png}}})
Deuxième après une tâche de compilation, utilisez gulp-replace pour remplacer toutes les références de fichiers statiques:
prenez la compilation du stylet en développement comme exemple:
gulp.task('dev-stylus', function() {
return gulp.src(['./fe/css/**/*.styl', '!./fe/css/**/_*.styl'])
.pipe(stylus({
use: nib()
}))
.pipe(replace(/\{\{\{(\S*)\}\}\}/g, '/static/build/$1'))
.pipe(gulp.dest('./static/build/css'))
.pipe(refresh());
});
Dans l'environnement de production, utilisez gulp-rev pour générer rev-manifest.json
gulp.task('release-build', ['release-stylus', 'release-js', 'release-img'], function() {
return gulp.src(['./static/build/**/*.css',
'./static/build/**/*.js',
'./static/build/**/*.png',
'./static/build/**/*.gif',
'./static/build/**/*.jpg'],
{base: './static/build'})
.pipe(gulp.dest('./static/tmp'))
.pipe(rev())
.pipe(gulp.dest('./static/tmp'))
.pipe(rev.manifest())
.pipe(gulp.dest('./static'));
});
Ensuite, utilisez gulp-replace pour remplacer les références dans les fichiers statiques par rev-manifest.json:
gulp.task('css-js-replace', ['img-replace'], function() {
return gulp.src(['./static/tmp/**/*.css', './static/tmp/**/*.js'])
.pipe(replace(/\{\{\{(\S*)\}\}\}/g, function(match, p1) {
var manifest = require('./static/rev-manifest.json');
return '/static/dist/'+manifest[p1]
}))
.pipe(gulp.dest('./static/dist'));
});
Cela m'a aidé gulp-html-replace .
<!-- build:js -->
<script src="js/player.js"></script>
<script src="js/monster.js"></script>
<script src="js/world.js"></script>
<!-- endbuild -->
var gulp = require('gulp');
var htmlreplace = require('gulp-html-replace');
gulp.task('default', function() {
gulp.src('index.html')
.pipe(htmlreplace({
'css': 'styles.min.css',
'js': 'js/bundle.min.js'
}))
.pipe(gulp.dest('build/'));
});
Vous pouvez le faire avec gulp-useref comme ça.
var gulp = require('gulp'),
useref = require('gulp-useref'),
filter = require('gulp-filter'),
uglify = require('gulp-uglify'),
minifyCss = require('gulp-minify-css'),
rev = require('gulp-rev');
gulp.task('html', function () {
var jsFilter = filter('**/*.js');
var cssFilter = filter('**/*.css');
return gulp.src('app/*.html')
.pipe(useref.assets())
.pipe(jsFilter)
.pipe(uglify())
.pipe(rev())
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe(minifyCss())
.pipe(rev())
.pipe(cssFilter.restore())
.pipe(useref.restore())
.pipe(useref())
.pipe(gulp.dest('dist'));
});
ou vous pouvez même le faire de cette façon:
gulp.task('html', function () {
var jsFilter = filter('**/*.js');
var cssFilter = filter('**/*.css');
return gulp.src('app/*.html')
.pipe(useref.assets())
.pipe(rev())
.pipe(jsFilter)
.pipe(uglify())
.pipe(jsFilter.restore())
.pipe(cssFilter)
.pipe(minifyCss())
.pipe(cssFilter.restore())
.pipe(useref.restore())
.pipe(useref())
.pipe(gulp.dest('dist'));
});
Le problème est la mise à jour des chemins d'accès aux ressources en html avec les nouveaux chemins d'accès aux fichiers rev. gulp-useref ne fait pas ça.