将 DocPad 用于具有多个登录页面的站点的实用方法

Practical way to use DocPad for a site with multiple landing pages

我想将 DocPad 与其内置服务器一起使用。

对于只有一个登陆页面的网站,我已经按照 DocPad 网站上的建议设置了结构:所有页面源都进入 src/documents,静态文件进入 src/files 和页面布局来源 src/layouts。然后 docpad run 将在 out 目录中生成结果站点并启动一个 Web 服务器,我可以使用它在我的浏览器中检查当前状态。

现在,我想对多个着陆页执行相同的操作。也就是说,我计划将文件部署到一个站点 http://site-one.org,将其他文件部署到另一个站点 http://site-two.org。我通过将网页部署到我的网络托管服务商的两个不同目录 /public/site-one//public/site-two/ 来做到这一点。

使用 DocPad 完成此任务的最实用方法是什么?

这些是我迄今为止尝试过的东西——它们都有效(有点),但都不是很优雅:

  1. 让页面源进入 src/documents/site-onesrc/documents/site-two,让静态文件进入 src/files/site-onesrc/files/site-two。这样可以正确呈现整个网站,并且可以轻松上传。然而,带有实时重载和内置服务器的整个 DocPad 基础设施不再工作(因为内置服务器根目录指向 out/ 而不是它应该指向的 out/site-[one|two]/)。
  2. 有两个单独的 DocPad 安装,带有重复的 docpad.coffee 文件、重复的插件和部分重复的 src/* 树,然后将生成的 out 树上传到相应的子目录服务器。

更新: 使用选项 1 时,可以使用自己的 Web 服务器,而不是使用 DocPad 内置的实时重新加载功能,将其指向 out/site-one在一个端口上,out/site-two 在另一个端口上,然后使用 grunt-contrib-watch, where grunt is available as a plugin here. It requires adding a single line of code to the template file, see this link, and to configure the plugin, see this link.

的 grunt 实时重载功能

更新 2: 一个可能的解决方案涉及为服务器设置自定义目录的能力。默认设置为 out 目录。虽然可以更改,但无法为 generate 操作和 watch 操作指定单独的目录。但是,我在配置文件中没有找到这样的选项。

事实证明,这比我想象的要容易得多。 DocPad 有一个鲜为人知的功能,称为 "environments"。这允许自定义几个常规配置变量,从而可以轻松地在命令行上选择所需的登录页面。

blog post on multiple languages 演示了如何在不同环境中自定义文档和输出路径。应用于我原来的问题变成:

docpadConfig = {
    ...
    environments:
        site-one:
            documentsPaths: ['documents_site-one']
            outPath: 'out_site-one'
        site-two:
            documentsPaths: ['documents_site-two']
            outPath: 'out_site-two'
    ...
}

那么就这么简单

docpad [generate|run|...] --env [site-one|site-two|...]

到 运行 常规命令,如 generate 等,通过选择适当的自定义环境,用于其中一个着陆页。