将 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 完成此任务的最实用方法是什么?
这些是我迄今为止尝试过的东西——它们都有效(有点),但都不是很优雅:
- 让页面源进入
src/documents/site-one
和 src/documents/site-two
,让静态文件进入 src/files/site-one
和 src/files/site-two
。这样可以正确呈现整个网站,并且可以轻松上传。然而,带有实时重载和内置服务器的整个 DocPad 基础设施不再工作(因为内置服务器根目录指向 out/
而不是它应该指向的 out/site-[one|two]/
)。
- 有两个单独的 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
等,通过选择适当的自定义环境,用于其中一个着陆页。
我想将 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 完成此任务的最实用方法是什么?
这些是我迄今为止尝试过的东西——它们都有效(有点),但都不是很优雅:
- 让页面源进入
src/documents/site-one
和src/documents/site-two
,让静态文件进入src/files/site-one
和src/files/site-two
。这样可以正确呈现整个网站,并且可以轻松上传。然而,带有实时重载和内置服务器的整个 DocPad 基础设施不再工作(因为内置服务器根目录指向out/
而不是它应该指向的out/site-[one|two]/
)。 - 有两个单独的 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.
更新 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
等,通过选择适当的自定义环境,用于其中一个着陆页。