【问题标题】:Inject CSS file in HTML head by replacing <link> tag通过替换 <link> 标签在 HTML 头部注入 CSS 文件
【发布时间】:2020-04-10 18:50:30
【问题描述】:

我正在寻找一个(基于 npm 的?)解决方案,可以简单地替换:

<link rel='stylesheet' href='style.css'>

<style><!-- actual contents of the style.css file here --></style>

作为制作轻量级静态网站的简单构建步骤。我发现了大量(通常是损坏的)包,它们在 DOM 中的每个元素中内联 CSS,这 不是 我想要的。

我的构建管道如下所示:

  1. 编译 SASS(缩小)
  2. 缩小 HTML
  3. 在 HTML &lt;style&gt; 标签中注入缩小的 CSS

我正在寻找第三步。

我尝试了以下 npm 包:

  • inlineCss: 改为在每个元素中添加内联样式。
  • Styliner:好像坏了。

【问题讨论】:

  • 你为什么不创建一个python脚本来处理这个?这相当简单,因为您还没有找到提供所需内容的工具。我正在研究它,只是为了好奇,如果你想要我的解决方案,我会分享。你可以把它聚合到一个 docker 镜像中,然后把它添加到一个 jenkins 阶段!

标签: javascript html css npm


【解决方案1】:

我有完全相同的要求。这就是我所做的。我正在使用 Gulp 来:

  1. 将 Sass 文件编译成 CSS
  2. 将链接标签注入到 HTML 文件中,这样我就不必手动将其添加到 HTML 文件中了
  3. 然后借助这些链接标签,我得到了CSS文件的href源, 获取这个 CSS 文件的内容,然后注入 CSS 文件 将内容放入 HTML 文件中,替换原始链接标记。

查看完整的 gulp 文件 here。我使用运行上述所有步骤的命令gulp build 执行此操作(链接文件的第 37 行)。

【讨论】:

    【解决方案2】:

    目前,我通过制作一个非常基本的替换脚本来解决这个问题;但它有效:

    inline-css.js

    const fs = require('fs');
    
    const html = fs.readFileSync('dist/index.html', 'utf8');
    const css = fs.readFileSync('dist/style.css', 'utf8');
    
    const inlinedHtml = html.replace(
        '<link rel="stylesheet"href="style.css"type="text/css"charset="utf-8">',
        "<style>" + css + "</style>");
    
    fs.writeFileSync('dist/index.inlined.html', inlinedHtml);
    
    

    然后使用$ node inline-css.js 运行它。

    【讨论】:

    • 我正在研究一个解决方案,它读取目录中的所有 .html(递归),搜索 &lt;link&gt; 属性并搜索位于 href 上的文件的 css 内容。这可以避免您了解映射 html-css,因为它们已经在文件中定义。这段代码虽然不是很可扩展,但只要它有效并且适合您的需求就完美了! :-)
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 2017-03-15
    • 2021-03-21
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 1970-01-01
    相关资源
    最近更新 更多