問題描述

我需要將樣式表的內容插入到 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="http://([.].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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。