如何在不删除页面的情况下取消发布 Gatsby 页面?

6
我使用了一个Gatsby starter建立了我的静态站点,其中包含一个演示页面,展示了所有的UI元素。我想保留这个页面(以便从演示中复制粘贴内容),但不想公开它。如何“取消发布”而不删除该文件?有没有办法告诉gatsby-node.js在生成面向公众的站点时跳过该页面?
3个回答

13

有许多Gatsby Node API助手可供使用,其中之一是deletePage

如果您有一个名为src/pages/demo.js的页面,则在创建期间将删除该页面。

// gatsby-node.js
exports.onCreatePage = async ({ page, actions: { deletePage } }) => {
    if (page.path.match(/^\/demo/)) {
      deletePage(page)
    }
}

2
这对我来说是最简单的,我只需添加 process.env.NODE_ENV === production && - RedOster

3
这里有许多好的选项,我只是想为插件选项添砖加瓦,以防止页面在第一时间被创建:
如果它是一个页面组件,即在src/pages文件夹内,则gatsby使用一个名为gatsby-plugin-page-creator的插件来生成页面,并且最近接受了忽略模式。
需要注意的是,内置的gatsby-plugin-page-creator不接受用户选项,因此我们必须将页面文件夹重命名以忽略它。
  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评论所指出的那样。
那里的示例甚至根据环境忽略文件,这更有用,因为您仍然可以在开发过程中查看参考,但不会在构建中显示。
{
  resolve: `gatsby-source-filesystem`,
  options: {
    path: `${__dirname}/content`,
    ignore: process.env.NODE_ENV === `production` && [`**/draft-*`]
  }
}

2
另一种方法是在前置元数据中添加一个“published”属性,假设它是一个可以是真或假值的Markdown页面。然后,在您的gatsby-node.js文件中添加逻辑来查看这个属性,以确定是否运行createPage()。"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接