Jekyll 如何将多个静态文件打包为zip存档以供下载

Jekyll 如何将多个静态文件打包为zip存档以供下载,jekyll,jekyll-extensions,Jekyll,Jekyll Extensions,我的Jekyll页面旨在为一本编码书的练习提供示例解决方案。 解决方案是一组.cpp文件(C++代码文件),存储在我的Jekyll项目中的一个文件夹中,这样我就可以在IDE中打开同一个文件夹 我已经成功地为每本书的章节自动生成一页,将相关的解决方案显示为代码块列表(每个练习一个)。我通过在site.static_文件中循环,并通过文件名中的数字识别文件(例如,第1章的两种解决方案:01_1_FirstSolution.cpp,01_2_SecondSolution.cpp) 现在,我还想为包含相

我的Jekyll页面旨在为一本编码书的练习提供示例解决方案。 解决方案是一组.cpp文件(C++代码文件),存储在我的Jekyll项目中的一个文件夹中,这样我就可以在IDE中打开同一个文件夹

我已经成功地为每本书的章节自动生成一页,将相关的解决方案显示为代码块列表(每个练习一个)。我通过在
site.static_文件中循环,并通过文件名中的数字识别文件(例如,第1章的两种解决方案:
01_1_FirstSolution.cpp
01_2_SecondSolution.cpp

现在,我还想为包含相关.cpp文件的每本书章节提供一个zip存档。我不想手动创建zip文件,因为那样我就不能再简单地更改其中一个代码文件了。理想情况下,我希望在遍历
site.static\u文件
并过滤相关文件的同时构建一个zip文件


在搜索时,我主要找到了捆绑和压缩资产的速度优化插件。我正在Windows上运行Jekyll。

Jekyll主要是一个静态网站构建器,因此在使用Jekyll构建网站之前,最好运行一个程序或shell脚本,并将它们输出到您希望输出到的
站点。静态\u文件
位置,如上所述

您可以在运行Jekyll之前使用脚本来压缩文件,然后运行Jekyll构建过程


您还可以使用插件或Ruby的
系统
命令来运行脚本作为构建的一部分,编写一些脚本以获得类似的结果。

如果可以获取文件内容(等),您可以使用库将其打包到Zip中。我不确定这是否适合你在杰基尔。。。但我会尝试这样做

要尝试一个示例,只需创建一个html文件或


var zip=newjszip();
zip.file(“Hello.txt”、“Hello World\n”);
zip.file(“Hello2.txt”,“Hello2-World\n”);
//var img=zip.folder(“图像”);
//img.file(“smile.gif”,imgData,{base64:true});
generateAsync({type:“blob”})
。然后((内容)=>{
//请参阅FileSaver.js
saveAs(内容,“example.zip”);
});

一旦你在现有答案上得出一些结论,我会做一些研究。@MauricioGraciaGutierrez我这样做了:-)而且你也已经批准了悬赏,酷。@MauricioGraciaGutierrez抱歉,宽限期快到了,我不想让分数白白浪费掉。我给出的答案有一个有趣的转折,所以它是值得的。我没有接受答案,因为问题还没有解决。如果您有其他方法,请随意回答。是否有标准的方法作为jekyll构建过程的一部分来执行脚本?如果我也可以使用Jekyll方法枚举静态文件
{%for file in site.static_files%}{%If file.path包含'/somesubfolder/'%}
,这将是很好的-尽管绝对不是必要的,因为我可以在脚本中使用
ls
,您可以使用生成器插件来运行“系统”命令。虽然我在文档中找不到太多的信息,但显示它是可以做到的。显然,这意味着从Ruby插件运行系统命令。也许Ruby zip库更适合在Jekyll bundle时生成归档文件。然而,作为最后的手段,在Javascript中进行动态操作也是非常困难的interesting@PhilLab我也这么认为,如果你可以跳过任何运行时工作,跳过它=)我将这个库用于我的代码生成器…@PhilLab如果你允许你的客户选择文件(通过电子邮件中的复选框),这也是一个好方法。
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js" integrity="sha512-uVSVjE7zYsGz4ag0HEzfugJ78oHCI1KhdkivjQro8ABL/PRiEO4ROwvrolYAcZnky0Fl/baWKYilQfWvESliRA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <script type="module" src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js" integrity="sha512-csNcFYJniKjJxRWRV1R7fvnXrycHP6qDR21mgz1ZP55xY5d+aHLfo9/FcGDQLfn2IfngbAHd8LdfsagcCqgTcQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> 
</head>
<body>
<script>
    var zip = new JSZip();
    zip.file("Hello.txt", "Hello World\n");
    zip.file("Hello2.txt", "Hello2 World\n");
    //var img = zip.folder("images");
    //img.file("smile.gif", imgData, {base64: true});
    zip.generateAsync({type:"blob"})
    .then((content) => {
        // see FileSaver.js
        saveAs(content, "example.zip");
    });
</script>
</body>
</html>