Nuxt/packages/nitro/src/index.ts

86 lines
2.3 KiB
TypeScript
Raw Normal View History

import type { Module } from '@nuxt/types'
2020-11-05 21:59:14 +00:00
import { build } from './build'
import { getoptions } from './config'
2020-11-05 11:28:39 +00:00
export default <Module> function slsModule () {
2020-11-05 11:28:39 +00:00
const { nuxt } = this
if (nuxt.options.dev) {
return
}
// Config
const options = getoptions(nuxt.options, nuxt.options.serverless || {})
2020-11-05 11:28:39 +00:00
2020-11-11 22:06:29 +00:00
// Tune webpack config
nuxt.options.build._minifyServer = false
nuxt.options.build.standalone = false
2020-11-05 11:28:39 +00:00
2020-11-11 22:06:29 +00:00
// Tune generator
nuxt.options.generate.crawler = false
if (Array.isArray(nuxt.options.generate.routes)) {
nuxt.options.generate.routes = Array.from(new Set([
...nuxt.options.generate.routes,
...options.static
]))
}
nuxt.options.generate.dir = options.publicDir
2020-11-11 22:06:29 +00:00
// serverMiddleware
// TODO: render:setupMiddleware hook
// TODO: support m.prefix and m.route
nuxt.hook('modules:done', () => {
2020-11-12 18:18:33 +00:00
const unsupported = []
2020-11-11 22:06:29 +00:00
for (let m of nuxt.options.serverMiddleware) {
if (typeof m === 'string') {
m = { handler: m }
}
const route = m.path || m.route || '/'
const handle = nuxt.resolver.resolvePath(m.handler || m.handle)
2020-11-12 18:18:33 +00:00
if (typeof handle !== 'string' || typeof route !== 'string') {
unsupported.push(m)
continue
}
options.serverMiddleware.push({ ...m, route, handle })
2020-11-12 18:18:33 +00:00
}
if (unsupported.length) {
console.warn('[serverless] Unsupported Server middleware used: ', unsupported)
console.info('Supported format is `{ path: string, handler: string }` and handler should export `(req, res) => {}`')
2020-11-11 22:06:29 +00:00
}
})
2020-11-05 21:40:25 +00:00
if (options.nuxtHooks) {
nuxt.addHooks(options.nuxtHooks)
}
2020-11-08 23:19:23 +00:00
nuxt.hook('generate:cache:ignore', (ignore: string[]) => {
ignore.push(options.slsDir)
2020-11-06 12:14:49 +00:00
ignore.push(options.targetDir)
ignore.push(...options.generateIgnore)
2020-11-05 11:28:39 +00:00
})
2020-11-05 12:02:57 +00:00
nuxt.hook('generate:page', (page) => {
// TODO: Use ssrContext
if (!options.static.includes(page.route)) {
2020-11-05 12:02:57 +00:00
page.exclude = true
}
})
nuxt.hook('generate:before', async () => {
console.info('Building light version for `nuxt generate`')
const { entry } = await build(getoptions(nuxt.options, {
target: 'cjs',
serverMiddleware: options.serverMiddleware
}))
console.info('Loading lambda')
require(entry)
})
nuxt.hook('generate:done', async () => {
await build(options)
})
2020-11-05 11:28:39 +00:00
}