跳转到导航 跳转到主要内容
CNB版本
社区版
cnb.cool
国外版
cnb.build
2025/12/30

添加 CSS、JavaScript、字体

当您决定要开始为 Eleventy 项目添加资源时,有许多路径可供选择。对于大多数项目来说,明智的做法是让项目的复杂性和长期维护目标来指导您选择哪种方法。从简单开始,当项目要求需要时,再发展到下一个复杂级别!

以下是从最简单到最复杂的几个选项:

Step 1 复制 CSSWeb 字体JavaScript 文件

这是最简单的方法,非常适合初学者和/或小型项目。它很棒,因为不需要打包工具或任何外部依赖

自定义用于:

这会复制在您的 HTMLCSS 中引用的各个 CSSJavaScriptWeb 字体 文件。

  1. 在您的根项目文件夹中创建一个 bundle.cssbundle.js 文件,并向该文件添加一些 CSSJavaScript 代码。
  2. 使用直通文件复制将文件复制到构建输出文件夹(您也可以在这里使用 glob):

    eleventy.config.js
    export default function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("bundle.css");
    };
    export default function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("font.woff2");
    };
    export default function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("bundle.js");
    };
    module.exports = function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("bundle.css");
    };
    module.exports = function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("font.woff");
    };
    module.exports = function(eleventyConfig) {
      eleventyConfig.addPassthroughCopy("bundle.js");
    };
  3. 使用以下方法在您的 CSS 中引用 Web 字体文件:
    @font-face {
    	font-family: My Font Name;
    	src: url('/font.woff2') format('woff2');
    	font-display: swap;
    }
  4. 使用以下方法在您的 HTML 中引用 CSS 文件:
    <link rel="stylesheet" href="/bundle.css">
  5. 使用以下方法在您的 HTML 中引用 JavaScript 文件:
    <script src="/bundle.js"></script>
展开查看使用连接的示例,从多个来源引入 CSSJavaScript

您可以使用 Nunjucks 和 Liquid 的 include 标签进行简单的连接。

接下来,您可以直接将此代码输出到您的页面:

Filenamepage.html
<style>
{% include "header.css" %}
{% include "footer.css" %}
{% include "./node_modules/my-ficticious-package-name/package.css" %}
</style>
Filenamepage.html
<script>
{% include "header.js" %}
{% include "footer.js" %}
{% include "./node_modules/my-ficticious-package-name/package.js" %}
</script>

Step 2 使用 Eleventy 模板

自定义用于:

您可以使用 Eleventy 模板生成您的捆绑文件,并从模板中使用 <link rel="stylesheet" href="/bundle.css"><script src="/bundle.js"></script> 引用它:

Filenamecss-bundle.html
---
permalink: bundle.css
---
{% include "header.css" %}
{% include "footer.css" %}
{% include "./node_modules/my-ficticious-package-name/package.css" %}
Filenamejs-bundle.html
---
permalink: bundle.js
---
{% include "header.js" %}
{% include "footer.js" %}
{% include "./node_modules/my-ficticious-package-name/package.js" %}
展开查看更多快速提示,展示如何压缩此捆绑文件。
展开查看使用此方法的社区资源。

在下面的文章中,Max 展示了如何使用 styles.11ty.js 模板文件生成一次性的 Sass 编译样式表:

Step 3 Eleventy 自定义模板

您可以在 Eleventy 中将 jscss(甚至是用于 Sass 的 scss)添加为自定义模板类型。这意味着添加到项目中的任何 jscss 文件都由 Eleventy 处理。

这还(可选地)允许您对 CSS(使用 Sass、PostCSS 或 LightningCSS)或客户端 JavaScript(使用 esbuild、rollup、WebPack 等)进行后处理,并将处理后的内容写入输出文件夹。这也允许您在捆绑代码中使用 Web 浏览器中不可用的功能,如 CSS 嵌套、TypeScript 或 JSX。

旁注:这严格适用于在 Web 浏览器中运行的代码。如果您想在作为构建一部分运行的 Node.js JavaScript 文件中使用 TypeScript 或 JSX,有不同的方法。

以下是一些帮助您入门的绝佳指南:

Step 4 组件驱动的捆绑

Eleventy 还提供了一个可选的纯文本Bundle 插件,允许您用内容页面的代码填充捆绑包。这使您能够使 CSS 和 JavaScript 内容驱动。Bundle 插件可用于 Nunjucks、Liquid、Handlebars、11ty.js 和 WebC 模板,并随 eleventy-base-blog 起始项目免费提供。

此外,Bundle 插件被 WebC 用于创建最小捆绑包,这些捆绑包仅包含每个 WebC 页面上使用的组件的 CSS 和 JavaScript。以这种方式使用 WebC 为页面的长期维护提供了最佳且最少投入的投资。当页面上的组件发生变化时,JavaScript 和 CSS 捆绑包会自动精简化,不会包含来自以前设计的额外代码。

开始使用 Bundle 插件

了解更多


其他页面在 Eleventy Projects