如何取消发布gatsby页面而不删除它?

时间:2019-04-04 15:38:09

标签: reactjs gatsby

我在我的静态网站上使用了一个盖茨比启动器,该启动器中包含的页面之一是带有所有UI元素的演示页面。

我想保留该页面(以便可以从演示中复制和粘贴),但不想公开使用。如何在不删除文件的情况下“取消发布”?

在生成面向公众的网站时,有没有办法告诉gatsby-node.js跳过该页面?

3 个答案:

答案 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-*`]
  }
}