我在我的静态网站上使用了一个盖茨比启动器,该启动器中包含的页面之一是带有所有UI元素的演示页面。
我想保留该页面(以便可以从演示中复制和粘贴),但不想公开使用。如何在不删除文件的情况下“取消发布”?
在生成面向公众的网站时,有没有办法告诉gatsby-node.js跳过该页面?
答案 0 :(得分:2)
您可以使用一堆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)
}
}
答案 1 :(得分:2)
另一种选择是,假设其为降价页,可以将true或false值添加到frontmatter中。然后将逻辑添加到您的gatsby-node.js
文件中,该文件将对此进行检查以确定是否运行createPage()
。
答案 2 :(得分:2)
这里有很多不错的选择,只是想为我的帽子选项大开眼界,以防止最初创建页面:
如果它是页面组件,即在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-*`]
}
}