Есть ли способ переписать HTML для использования gulp-minified CSS

Я борюсь со следующим:

мой gulpfile.Яш компилирует все .меньше, minifies и concattenates все CSS в ./ dist / all.минута.в CSS

есть ли способ переписать HTML-файл, удалить все теги стилей и поместить в него только один тег стиля, загрузив мини-CSS?

3 ответов


лучший способ справиться с этим-использовать один из HTML-инжекторов с самого начала. Я использую gulp-inject к некоторому успеху до сих пор.

добавить глоток-впрыснуть проект:

npm i --save-dev gulp-inject

предполагая, что у вас есть макет папки, похожий на это:

  • построить/
  • src/
      .HTML-код
  • меньше/
    • main.меньше
  • js/
    • app.js

ваш HTML должен включать это, где вы хотите, чтобы CSS или JS-файлы были введены, либо голова для обоих, либо голова для CSS и непосредственно перед телом для ваших 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 -->

тогда ваш gulpfile выглядит примерно так:

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');
    });
});

это просто грубая идея, и вы можете сделать намного больше, используя gulp-watch для инкрементных сборок, но ключ здесь в том, что мы смотрим построить каталог, чтобы выбрать, когда перестроить HTML-файл, и посмотреть src


вы хотите переписать его во время построения? Почему бы не заменить все ссылки CSS одной ссылкой на все.минута.CSS в исходном коде? В любом случае, вы можете использовать gulp-replace плагин для поиска и замены строки в файлах во время сборки. Вот еще один пример проекта, чтобы посмотреть на:

Шаблон Веб-Приложения - HTML5 шаблон интерфейсного веб-приложения расширен с помощью меньше таблицы стилей и залпом.js построить систему.


см. также gulp-smoosher. Пример:

.HTML-код

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

стили.в CSS

body {
    background: red;
}

Gulpfile.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>