Y a-t-il un moyen de réécrire le HTML pour utiliser gulfill-minified CSS

je suis aux prises avec la commande suivante:

Mon gulpfile.js compile tout .moins, le minifie et concattenate tous les CSS en ./dist/.min.css

y a-t-il un moyen de réécrire le fichier HTML, de supprimer toutes les balises de style et de n'y mettre qu'une seule balise de style en chargeant le CSS miniifié?

31
demandé sur dlaxar 2014-01-12 12:48:13

3 réponses

la meilleure façon de gérer cela est d'utiliser L'un des injecteurs HTML du get-go. Je suis à l'aide de gulp-inject pour un certain succès jusqu'à présent.

Ajouter gulp-injecter pour votre projet:

npm i --save-dev gulp-inject

en supposant que vous avez une disposition de dossier similaire à ceci:

  • build/
  • src/
    • index.html
    • moins/
      • main.moins
    • js/
      • app.js

votre HTML doit inclure ceci où vous voulez que les fichiers CSS ou JS soient injectés, soit la tête pour les deux, soit la tête pour le CSS et juste avant le corps pour vos fichiers JS:

<!-- inject:css -->
<!-- any *.css files among your sources will go here as: <link rel="stylesheet" href="FILE"> -->
<!-- endinject -->

<!-- inject:js -->
<!-- any *.js files among your sources will go here as: <script src="FILE"></script> -->
<!-- endinject -->

alors votre gulffile regarde quelque chose comme ceci:

gulp.task('build-styles', function() {
    // the return is important!
    return gulp.src('src/less/main.less')
            .pipe(less())
            .pipe(gulp.dest('build'));
});


gulp.task('build-js', function() {
    // the return is important if you want proper dependencies!
    return gulp.src('src/js/**/*.js')
            // lint, process, whatever
            .pipe(gulp.dest('build'));
});

gulp.task('build-html', function() {
    // We src all files under build
    return gulp.src('build/**/*.*')
            // and inject them into the HTML
            .pipe(inject('src/index.html', {
                        addRootSlash: false,  // ensures proper relative paths
                        ignorePath: '/build/' // ensures proper relative paths
                    }))
            .pipe(gulp.dest('build'));
});

gulp.task('build', ['build-styles', 'build-js'], function(cb) {
    gulp.run('build-html', cb);
});

gulp.task('default', ['build'], function() {
    gulp.watch('src/**/*.less', function() {
        gulp.run('build-styles');
    });
    gulp.watch(['build/**/*.*','!build/index.html', 'src/index.html'], function() {
        gulp.run('build-html');
    });
});

C'est juste une idée, et vous pouvez faire beaucoup plus en utilisant gulp-watch pour les des versions, mais la clé ici est que nous montre l' construire répertoire de choisir le moment de reconstruire le fichier HTML, et de regarder les src répertoire pour tout le reste.

NOTE:

Puisqu'il y a beaucoup d'upvotes, il y a quelques autres plugins qui font le remplacement de référence à côté de gulp-inject. Vous pouvez vouloir les regarder et voir si l'un d'eux est mieux adapté pour vous, surtout si vous n'utilisez pas gulp-rev:

il y a aussi deux bibliothèques CDN qui font la même chose, mais pour les ressources CDN

50
répondu OverZealous 2015-02-08 21:54:50

vous voulez le réécrire pendant la construction? Pourquoi ne pas remplacer tous les liens CSS par un lien unique vers tous.min.css dans votre code source? De toute façon, vous pouvez utiliser gulp-remplacez plug-in pour rechercher et remplacer une chaîne de caractères dans vos fichiers pendant une génération. Voici un autre exemple de projet à examiner:

Boilerplate De L'Application Web - HTML5 modèle de demande Boilerplate front-end web étendu avec moins les feuilles de style et Gulp.js système de construction.

4
répondu Konstantin Tarkus 2014-01-12 16:30:45

Voir aussi gulp-smoosher. Exemple:

index.html

<html>
    <head>
        <!-- smoosh -->
        <link rel='stylesheet' href='styles.css'>
        <!-- endsmoosh -->
    </head>

les styles.css

body {
    background: red;
}

Gulffile.js

gulp.task('default', function () {
    gulp.src('index.html')
        .pipe(smoosher())
        .pipe(gulp.dest('dist'));
});

dist / index.html

<html>
    <head>
        <style>body {
            background: red;
        }</style>
    </head>
0
répondu Gabriel Florit 2015-06-24 22:53:17