【发布时间】:2019-04-04 15:38:09
【问题描述】:
我为我的静态网站使用了 Gatsby 启动器,该启动器中包含的页面之一是包含所有 UI 元素的演示页面。
我想保留该页面(以便我可以从演示中复制和粘贴),但不想公开。如何在不删除文件的情况下“取消发布”?
有没有办法告诉 gatsby-node.js 在生成面向公众的网站时跳过该页面?
【问题讨论】:
我为我的静态网站使用了 Gatsby 启动器,该启动器中包含的页面之一是包含所有 UI 元素的演示页面。
我想保留该页面(以便我可以从演示中复制和粘贴),但不想公开。如何在不删除文件的情况下“取消发布”?
有没有办法告诉 gatsby-node.js 在生成面向公众的网站时跳过该页面?
【问题讨论】:
您可以使用一堆Gatsby Node API helpers,其中一个是deletePage。
如果您有一个页面src/pages/demo.js,这将在创建过程中删除该页面。
// gatsby-node.js
exports.onCreatePage = async ({ page, actions: { deletePage } }) => {
if (page.path.match(/^\/demo/)) {
deletePage(page)
}
}
【讨论】:
production &&
这里有很多不错的选择,只是想把我的帽子放在戒指中,以防止首先创建页面的插件选项:
如果它是一个页面组件,即在src/pages文件夹内,gatsby使用一个名为gatsby-plugin-page-creator的插件来生成页面,它最近接受了一个忽略模式。
需要注意的是,内置的 gatsby-plugin-page-creator 不接受用户选项,因此我们必须重命名 pages 文件夹以忽略它。
root
└── src
- └── pages
+ └── screens <-- rename
└── index.js
└── ignore-file-name.js
然后在 gatsby-config.js 中:
module.exports = {
plugins: [
{
resolve: `gatsby-plugin-page-creator`,
options: {
path: `${__dirname}/src/screens`,
ignore: [`ignore-file-name.js`],
},
},
]
}
如果它是从 markdown 或 json 以编程方式生成的页面,您可能可以在 gatsby-source-file-system 中忽略它,正如 github comment 中所指出的那样。
那里的示例甚至忽略了基于环境的文件,这更有用,因为您仍然可以在开发过程中看到您的参考,但它不会在构建中显示。
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${__dirname}/content`,
ignore: process.env.NODE_ENV === `production` && [`**/draft-*`]
}
}
【讨论】:
另一种方法是在 frontmatter 中添加一个“已发布”属性,假设它是一个可以是 true 或 false 值的 markdown 页面。然后将逻辑添加到您的 gatsby-node.js 文件中,该文件查看此以确定是否运行 createPage()。
【讨论】: