Eleventy SSG搭配Strapi CMS:内容更新是否需重启及自动更新方法咨询
解决Eleventy与Strapi内容自动同步问题
你不需要重启Eleventy服务器就能同步Strapi更新的内容。当前更新后站点无变化,是因为Eleventy默认只监听本地文件系统的变动,而Strapi内容存储在数据库中,本地没有文件更新触发Eleventy重新构建,所以只有重启时才会重新拉取CMS内容。
以下是几种无需重启即可同步内容的方法:
方法1:利用Strapi Webhook触发Eleventy重新构建
这是最实时、高效的方案:
- 启动Eleventy开发服务器时启用监听与自动重载:
执行以下命令启动服务器,它会开启文件监听并提供内置的重载端点:npx @11ty/eleventy --serve --watch - 在Strapi中配置Webhook:
- 登录Strapi后台,进入「Settings」>「Webhooks」,点击「Add new webhook」。
- 填写Webhook名称,在「Trigger events」中勾选内容相关事件(比如
entry.create、entry.update、entry.delete)。 - 在「URL」栏填写Eleventy开发服务器的重载端点:
http://localhost:8080/__reload(若修改过默认端口,对应替换即可)。 - 保存Webhook。
之后每次在Strapi中更新内容,Webhook会自动发送请求触发Eleventy重新构建,站点内容会自动同步更新。
方法2:定时触发Eleventy重新构建
如果暂时无法配置Webhook,可以设置定时任务定期拉取Strapi内容并重新构建:
- 安装
node-schedule定时工具,在项目中编写脚本定时执行Eleventy构建命令:const schedule = require('node-schedule'); const { exec } = require('child_process'); // 每5分钟执行一次构建 schedule.scheduleJob('*/5 * * * *', function(){ exec('npx @11ty/eleventy', (error, stdout, stderr) => { if (error) { console.error(`构建错误: ${error.message}`); return; } console.log(`构建完成`); }); }); - 在
package.json中配置组合脚本,启动开发服务器时同时运行定时任务:"scripts": { "dev": "npx @11ty/eleventy --serve --watch & node schedule-build.js" }
这种方法的缺点是同步存在延迟,适合对实时性要求不高的场景。
方法3:监听本地缓存文件触发重新构建
如果上述方法都不适用,可以通过监听本地缓存文件的变动间接触发Eleventy构建:
- 在Eleventy配置文件(
.eleventy.js)中添加监听目标:module.exports = function(eleventyConfig) { // 监听本地的strapi-cache.txt文件 eleventyConfig.addWatchTarget('./strapi-cache.txt'); }; - 在Strapi中编写自定义服务,当内容更新时修改
strapi-cache.txt的内容(比如写入当前时间戳)。 - 启动Eleventy开发服务器时带上
--watch参数,每次strapi-cache.txt变动,Eleventy就会重新拉取Strapi内容并构建。
这种方法需要额外的Strapi自定义开发,适合需要自定义触发逻辑的场景。
内容的提问来源于stack exchange,提问作者Akshay Phalke
相关产品推荐
相关产品推荐

