问题描述

我需要将样式表的内容插入到 HTML 页面的<head> 中。我怎么能在 Gulp 这样做?

之前 (我有什么):

<head>
  <link href="style.css" rel="stylesheet" type="text/css" />
</head>

之后 (我想要什么):

<head>
  <style>
     p { color: pink; }
  </style>
</head>

请注意,我不需要将 CSS 嵌入到元素中,而是将 CSS 的内容放在<head> 中。

最佳解决方法

您可以轻松使用 gulp-replace,如下所示:

var gulp = require('gulp'),
    replace = require('gulp-replace'),
    fs = require('fs');

// in your task
return gulp.src(...)
  .pipe(replace(/<link href="style.css"[^>]*>/, function(s) {
      var style = fs.readFileSync('style.css', 'utf8');
      return '<style>n' + style + 'n</style>';
  }))
  .pipe(gulp.dest(...));

您也可以轻松地修改替换 RegEx 来处理不同的文件。

return gulp.src(...)
  .pipe(replace(/<link href="([^.].css)"[^>]*>/g, function(s, filename) {
      var style = fs.readFileSync(filename, 'utf8');
      return '<style>n' + style + 'n</style>';
  }))
  .pipe(gulp.dest(...));

次佳解决方法

现在有一个 gulp 模块:https://github.com/fmal/gulp-inline-source

第三种解决方法

您也可以考虑选择 https://www.npmjs.com/package/gulp-inline-css

你可以这样做:

1. 安装 gulp-inline-css 。

npm i -S gulp-inline-css

写一个小的 gulp 任务。

var gulp = require('gulp'),
    inlineCss = require('gulp-inline-css');

gulp.task('default', function() {
    return gulp.src('./*.html')
        .pipe(inlineCss())
        .pipe(gulp.dest('build/'));
});

inline-css 的所有选项都可以通过此任务传递。它对桌面样式或 HTML 电子邮件 pre-processing 是好的。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。