Monorepo工作区使用Eleventy遇TemplateLayoutPathResolver错误求助
Eleventy报错TemplateLayoutPathResolver directory does not exist for component: _includes 解决方法
问题根源
你的Eleventy配置中,dir.includes的路径是相对于dir.input解析的,而Eleventy的目录配置默认基于运行命令时的工作目录,而非配置文件所在目录。结合你的目录结构:
monorepo - workspace 2 - docs - _includes - pages - eleventy.config.cjs
如果运行Eleventy时不在docs目录下,配置里的input: 'pages'会指向错误的路径(比如workspace2/pages而非workspace2/docs/pages),导致includes: '../_includes'解析为不存在的目录,触发报错。
解决方法
方法1:使用绝对路径(推荐,不受运行目录影响)
修改eleventy.config.cjs中的dir配置,利用__dirname(当前配置文件所在目录)生成绝对路径,确保路径解析始终正确:
// ... 其他配置代码 ... return { dir: { input: path.resolve(__dirname, 'pages'), // 指向 docs/pages output: path.resolve(__dirname, '../_site'),// 指向 workspace2/_site includes: path.resolve(__dirname, '_includes') // 指向 docs/_includes }, markdownTemplateEngine: 'njk', templateEngineOverride: ['njk'] };
方法2:固定运行目录
确保运行Eleventy命令时始终在docs目录下执行:
- 进入
workspace2/docs目录:cd monorepo/workspace2/docs - 执行Eleventy命令:
npx @11ty/eleventy # 或启动开发服务器 npx @11ty/eleventy --serve
也可以在workspace2/package.json中添加脚本简化操作:
{ "scripts": { "docs:build": "cd docs && npx @11ty/eleventy", "docs:serve": "cd docs && npx @11ty/eleventy --serve" } }
之后直接运行npm run docs:build或npm run docs:serve即可。
内容的提问来源于stack exchange,提问作者user22789501
相关产品推荐
相关产品推荐

