本文详解如何使用Eleventy(11ty)将WordPress导出为静态网站(Jamstack架构)。

什么是Eleventy(11ty)

Eleventy(2018年发布):

  • 简单、轻量的静态网站生成器(SSG)
  • 支持多种模板语言(Nunjucks/Liquid/Handlebars/Markdown)
  • 零客户端JavaScript(性能极致)
  • 构建速度:1000页面 < 1秒

vs Hugo/Gatsby:

  • Hugo:更快(Go语言),但学习曲线陡
  • Gatsby:功能强(React),但复杂
  • Eleventy:简单灵活(Node.js),适合中小型项目

为什么静态导出WordPress

优势:

  • 性能极致(TTFB < 50ms)
  • 安全性高(无PHP/MySQL,无法被黑)
  • 托管便宜(静态文件 → GitHub Pages/Cloudflare Pages免费)
  • 可扩展性强(CDN缓存)

劣势:

  • 无法实时更新(需要重新构建)
  • 无用户登录/评论(需要第三方服务)
  • 不适合电商(需要动态功能)

实战一:搭建Eleventy项目

安装Eleventy

# 初始化Node.js项目

mkdir wp-static && cd wp-static

npm init -y

安装Eleventy(本地安装)

npm install @11ty/eleventy

安装WordPress REST API客户端

npm install axios

添加到package.json scripts

"scripts": {

"build": "eleventy",

"serve": "eleventy --serve"

}

项目结构

wp-static/

├── _data/ # 全局数据(11ty自动读取)

│ └── posts.js # 从WordPress获取文章

├── _includes/ # 模板部分

│ ├── base.njk # 基础模板

│ └── post.njk # 文章模板

├── index.njk # 首页

├── posts/ # 文章页(动态生成)

│ └── post.njk

├── .eleventy.js # 配置文件

└── package.json

实战二:从WordPress获取数据

创建数据文件(_data/posts.js)

// _data/posts.js

const axios = require('axios');

module.exports = async () => {

try {

const response = await axios.get('https://www.shenma98.com/wp-json/wp/v2/posts', {

params: {

per_page: 100, // 最多100篇

_embed: true, // 嵌入媒体/分类

},

});

return response.data.map(post => ({

id: post.id,

title: post.title.rendered,

slug: post.slug,

content: post.content.rendered,

excerpt: post.excerpt.rendered,

date: post.date,

modified: post.modified,

featuredImage: post._embedded?.['wp:featuredmedia']?.[0]?.source_url || null,

categories: post._embedded?.['wp:term']?.[0]?.map(term => term.name) || [],

author: post._embedded?.author?.[0]?.name || 'Unknown',

}));

} catch (error) {

console.error('获取WordPress数据失败:', error.message);

return [];

}

};

创建分类数据(_data/categories.js)

// _data/categories.js

const axios = require('axios');

module.exports = async () => {

const response = await axios.get('https://www.shenma98.com/wp-json/wp/v2/categories');

return response.data;

};

实战三:创建模板

基础模板(_includes/base.njk)

{% block title %}我的静态网站{% endblock %}

我的静态网站

{% block content %}{% endblock %}

© 2026 我的静态网站

首页模板(index.njk)

---

layout: layouts/base.njk

title: 首页

---

{% block content %}

最新文章

    {% for post in posts | reverse | limit(10) %}

  • {{ post.title }}

  • {% endfor %}

{% endblock %}

文章模板(posts/post.njk)

---

layout: layouts/base.njk

---

{% block title %}{{ title }}{% endblock %}

{% block content %}

{{ title }}

作者:{{ author }} | 日期:{{ date | dateFormat }}

{% if featuredImage %}

{{ title }}

{% endif %}

{{ content | safe }}

分类:{{ categories | join(', ') }}

{% endblock %}

实战四:配置Eleventy

.eleventy.js

// .eleventy.js

module.exports = function(eleventyConfig) {

// 1. 复制静态资源

eleventyConfig.addPassthroughCopy('css');

eleventyConfig.addPassthroughCopy('images');

// 2. 添加日期过滤器

eleventyConfig.addFilter('dateFormat', (dateStr) => {

const date = new Date(dateStr);

return date.toLocaleDateString('zh-CN', {

year: 'numeric',

month: 'long',

day: 'numeric',

});

});

// 3. 创建文章页(动态路由)

eleventyConfig.addCollection('posts', (collectionApi) => {

return collectionApi.getAll()[0].data.posts; // 从_data/posts.js获取

});

return {

dir: {

input: '.',

output: '_site',

data: '_data',

includes: '_includes',

},

templateFormats: ['njk', 'md', 'html'],

htmlTemplateEngine: 'njk',

markdownTemplateEngine: 'njk',

};

};

创建动态文章页(posts/post.njk)

---

permalink: /posts/{{ slug }}/index.html

---

{% extends "layouts/base.njk" %}

{% block title %}{{ title }}{% endblock %}

{% block content %}

{{ title }}

{{ content | safe }}

{% endblock %}

实战五:构建与部署

构建静态网站

# 构建(输出到_site/目录)

npm run build

输出示例:

Copied 12 files / 45 items

Processed 55 files (0.32 seconds)

Wrote 55 files (0.45 seconds)

本地预览

# 启动开发服务器(自动重载)

npm run serve

访问:http://localhost:8080

部署到Cloudflare Pages

# 1. 推送到GitHub

git init

git add .

git commit -m "Initial commit"

git remote add origin https://github.com/yourname/wp-static.git

git push -u origin main

2. 导入到Cloudflare Pages

访问 https://pages.cloudflare.com/

选择GitHub仓库:wp-static

构建命令:npm run build

输出目录:_site

3. 部署

Cloudflare Pages自动构建并部署

每次git push → 自动重新部署

部署到Netlify

# 1. 推送到GitHub(同上)

2. 导入到Netlify

访问 https://app.netlify.com/

选择GitHub仓库:wp-static

构建命令:npm run build

输出目录:_site

3. 部署

Netlify自动构建并部署

实战六:增量构建(只重建修改的页面)

使用Eleventy --incremental

# 增量构建(只重建修改的文件)

eleventy --incremental

配置package.json

"scripts": {

"build": "eleventy",

"build:incremental": "eleventy --incremental"

}

使用Git Hooks(自动重建)

# 安装husky(Git Hooks管理器)

npm install -D husky

初始化husky

npx husky install

添加pre-commit钩子

npx husky add .husky/pre-commit "npm run build"

现在每次git commit都会自动构建

高级优化

优化一:图片优化(使用eleventy-img)

# 安装eleventy-img

npm install @11ty/eleventy-img

// .eleventy.js

const Image = require('@11ty/eleventy-img');

eleventyConfig.addNunjucksShortcode('image', async (src, alt) => {

let stats = await Image(src, {

widths: [300, 600, 1200],

formats: ['webp', 'jpeg'],

outputDir: './_site/images/',

});

return Image.generateHTML(stats, {

alt,

loading: 'lazy',

sizes: '100vw',

});

});

{% image post.featuredImage, post.title %}

优化二:RSS Feed(使用eleventy-rss)

# 安装eleventy-rss

npm install @11ty/eleventy-rss

// .eleventy.js

const rss = require('@11ty/eleventy-rss');

eleventyConfig.addPlugin(rss, {

postcontent: true, // 包含文章正文

});

---

permalink: /feed.xml

---

我的静态网站

{{ posts | last | dateFormat }}

{% for post in posts %}

{{ post.title }}

{{ post.modified | dateFormat }}

{{ post.content | safe }}

{% endfor %}

决策建议

| 场景 | 是否静态导出 | 理由 |

|------|----------------|------|

| 内容型网站(博客/新闻) | ✅ 强烈推荐 | 性能极致,安全 |

| 电商网站 | ❌ 不推荐 | 需要动态功能 |

| 会员制网站 | ❌ 不推荐 | 需要用户登录 |

| 企业官网(展示型) | ✅ 推荐 | 托管便宜 |

总结

Eleventy是2026年最轻量的静态网站生成器。将WordPress静态导出,可以实现TTFB < 50ms的极致性能。

立即行动:用Eleventy创建你的第一个WordPress静态导出项目!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。