UNPKG

gridsome

Version:

A JAMstack framework for building blazing fast websites with Vue.js

56 lines (45 loc) 1.53 kB
const path = require('path') const fs = require('fs-extra') const { NOT_FOUND_NAME } = require('../../utils/constants') function corePlugin (api, config) { api.loadSource(store => { store.addMetadata('siteName', config.siteName) store.addMetadata('siteDescription', config.siteDescription) store.addMetadata('siteUrl', config.siteUrl) store.addMetadata('pathPrefix', config.pathPrefix) for (const key in config.metadata) { store.addMetadata(key, config.metadata[key]) } }) api.createPages(({ createPage }) => { createPage({ path: '/404' + (config.permalinks.trailingSlash ? '/' : ''), component: path.join(config.appPath, 'pages', '404.vue'), route: { name: NOT_FOUND_NAME } }) }) api.afterBuild(({ config }) => { const notFoundPath = path.join(config.outputDir, '404', 'index.html') const notFoundDest = path.join(config.outputDir, '404.html') if (fs.existsSync(notFoundPath)) { fs.copySync(notFoundPath, notFoundDest) } }) // Flags the `/404` page to detect it in the router guard. api._app.pages.hooks.createPage.tap('Gridsome', (options) => { if (options.path === '/404') { const context = { ...options.context, __notFound: true } return { ...options, context } } return options }) api._app.pages.hooks.createRoute.tap('Gridsome', options => { if (/\/404\/?/.test(options.path)) { options.name = NOT_FOUND_NAME } return options }) } module.exports = corePlugin