簡體   English   中英

如何在 Javascript 文件中包含使用 Jekyll 定義的液體/全局變量?

[英]How do I include liquid/global variables defined using Jekyll in a Javascript file?

目前我正在使用 Jekyll 構建一個網站,其中包含 markdown 和 html 文件。 例如,如果我想使用在 html/md 的“_data”文件夾中定義的變量,我可以簡單地使用 {% for item in site.data.XX %}。 我的問題是,在 Javascript 中到達 Jekyll 變量(例如站點)時,正確的語法是什么?

我在我的 JS 文件中使用 frontmatter。 我應該在那里包含一些東西還是進行導入?

我試過了:

  • console.log(site.collections);
  • console.log({{site.collections}});

但我只是收到錯誤“未定義站點”或“未捕獲語法錯誤:無效或意外令牌”。

我剛剛發現了問題(你之前解決了大衛): Jekyll:liquid tag inside javascript

添加時似乎可以正確打印(沒有語法錯誤):

console.log({{ site.collections | jsonify }})

任何帶有front-matter的文件都會被jekyll處理...

例如: anyfile-with-front-matter.js

---
title: my js file
---
console.log({{page.title}});
console.log({{site.description}});

...,除非它被“忽略”。

默認:

  • 任何帶下划線的文件夾都會被忽略(例如:_myfolder)
  • 默認配置忽略 node_modules、vendor/bundle/、vendor/cache/、vendor/gems/ 和 vendor/ruby/ 文件夾

要使包含的文件可用於處理,您可以添加包含文件夾以在_config.yml中包含數組。

include:
 - node_modules
 - _myfolder

這是我的猜測。

Jekyll 是一個靜態站點生成器,基本上只運行一次 它唯一一次連續運行是當您調用以下任一命令時: jekyll jekyll servejekyll build --watch

另一方面,JavaScript 腳本旨在針對給定頁面的每個請求運行。 除非有運行 Jekyll 的服務器,否則您的腳本將無法使用所謂的全局變量。

但是,話雖如此,您仍然可以使用 Jekyll 變量來生成static JS 腳本。 例如,考慮以下內容:

./_data/navigation.yml

- label: Home
  url: "/"
- label: About Us
  url: "/about/"

./_includes/script-template.html

<script>
  {% for entry in site.data.navigation %}
    console.log('{{ entry.label }}');
  {% endfor %}
</script>

./test.html

---
---
<body>
  {% include script-template.html %}
</body>

如果您要構建包含上述文件的站點,生成的 html 文件./_site/test.html將如下所示:

<body>
  <script>

    console.log('Home');
    console.log('About Us');

  </script>
</body>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM