如何将我的布局路径正确定位到使用 HTML、EJS 和 Markdown 构建的 11ty (Eleventy) 博客目录?

Posted

技术标签:

【中文标题】如何将我的布局路径正确定位到使用 HTML、EJS 和 Markdown 构建的 11ty (Eleventy) 博客目录?【英文标题】:How do I address path to my layouts correctly to my 11ty (Eleventy) blogs directory built with HTML, EJS & Markdown? 【发布时间】:2021-10-02 10:43:01 【问题描述】:

我正在尝试解决资产(css 和 img)文件夹的路径,但它出错或在我的 markdown 文件和 base.ejs 文件中完全找不到路径...

请帮帮我,我知道这是我的配置问题或我不太了解的问题...

Github 仓库:https://github.com/MikeTeddyOmondi/crypto-blogs

【问题讨论】:

【参考方案1】:

问题:

assets/ 无法访问 .src/blogs/ 中的表单帖子(例如 .src/blogs/blockchain-technology.md)

TL;DR

你需要../../assets/ 而不是../assets/

在 blogs/ 文件夹中的帖子使用的模板中。

说明

这是您项目的结构:

➜  crypto-blogs-master tree -aI 'node_*' -L 3
.
├── .eleventy.js
├── ...
└── src
    ├── assets
    │   ├── css
    │   └── img
    ├── blogs
    │   ├── blockchain-technology.md
    │   ├── blogs.json
    │   └── ...
    ├── _includes
    │   └── base.ejs
    ├── blogs.md
    ├── index.md
    ├── projects.md
    ├── ...

当尝试从 blogs/index.html 或 projects/index.html 访问资产资源时,它会按预期工作。因为,在 base.ejs 中,您有:

    <link href="../assets/css/..." /> <!-- line 16 -->
    <img src="../assets/img/... " /> <!-- line 24 -->

但它不适用于 blogs/ 文件夹中的帖子。

要解决此问题,您需要更改资产的路径

  # from
  ../asstes/
  # to
  ../../asstes/

为此,您可以:

    在模板 base.ejs 的 Front Matter 中定义一个变量 relative_path
---
relative_path: '..'
---
// base.ejs

    替换所有出现的:../assets/

    与:&lt;%= relative_path %&gt;/assets/ in base.ejs

    对于博客文件夹中的每个文件(帖子),您需要重新定义relative_path

要么:

3.1。在他们各自的 Front Matter 上:

---
  relative_path: '../..'
---
// blockchain-technology.md + ... post-n.md

3.2。或使用eleventyComputed,通过在 blogs 文件夹中创建一个文件 blogs.11tydata.js 来同时为所有这些文件创建一个包含此代码的文件

  module.exports = function () 
    return 
      eleventyComputed: 
        relative_path: "../.."
      
    
  

注意 1 在 /blogs/blogs.json 中定义 relative_path 将不起作用。因为11ty中级联数据的merging order(截至当前版本)。

注意 2 index.md 的正确 relative_path 是“。”而不是“..”,不过既然是在输入目录下就好了。

注意 3 一个更快的解决方案是复制 base.ejs,重命名它(例如 post.ejs),编辑它,然后从 blog.json 调用。

【讨论】:

【参考方案2】:

对我来说,当事情不正常时,我总是查看输出目录。我下载了你的 zip,运行 eleventy 来输出构建,我看到你的资产被正确复制了。例如,在public 中,我看到一个assets/css 目录,其中包含styles.css。在您的 HTML 中,您将链接到:/assets/css/styles.css。你试过吗?

【讨论】:

以上是关于如何将我的布局路径正确定位到使用 HTML、EJS 和 Markdown 构建的 11ty (Eleventy) 博客目录?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 EJS 模板引擎将变量传递给内联 javascript?

JSF Primefaces 在布局问题中使用菜单栏

ejs中的布局`yield`方法是啥?

将css文件链接到html时如何正确写出本地文件的绝对路径?

如何将我的 svg 图像定位到浏览器的中心

如何正确排序我的评论/回复/回复以回复数据