react-static
Version:
A progressive static site generator for React
79 lines (74 loc) • 2.05 kB
JavaScript
import axios from 'axios'
import path from 'path'
// Paths Aliases defined through tsconfig.json
const typescriptWebpackPaths = require('./webpack.config.js')
export default {
entry: path.join(__dirname, 'src', 'index.tsx'),
getSiteData: () => ({
title: 'React Static',
}),
getRoutes: async () => {
const { data: posts } = await axios.get('https://jsonplaceholder.typicode.com/posts')
return [
{
path: '/',
component: 'src/containers/Home',
},
{
path: '/about',
component: 'src/containers/About',
},
{
path: '/blog',
component: 'src/containers/Blog',
getData: () => ({
posts,
}),
children: posts.map(post => ({
path: `/post/${post.id}`,
component: 'src/containers/Post',
getData: () => ({
post,
}),
})),
},
{
is404: true,
component: 'src/containers/404',
},
]
},
webpack: (config, { defaultLoaders }) => {
// Add .ts and .tsx extension to resolver
config.resolve.extensions.push('.ts', '.tsx')
// Add TypeScript Path Mappings (from tsconfig via webpack.config.js)
// to react-statics alias resolution
config.resolve.alias = typescriptWebpackPaths.resolve.alias
// We replace the existing JS rule with one, that allows us to use
// both TypeScript and JavaScript interchangeably
config.module.rules = [
{
oneOf: [
{
test: /\.(js|jsx|ts|tsx)$/,
exclude: defaultLoaders.jsLoader.exclude, // as std jsLoader exclude
use: [
{
loader: 'babel-loader',
},
{
loader: require.resolve('ts-loader'),
options: {
transpileOnly: true,
},
},
],
},
defaultLoaders.cssLoader,
defaultLoaders.fileLoader,
],
},
]
return config
},
}