Nuxt/packages/nuxt3/src/nuxt.ts

63 lines
1.6 KiB
TypeScript
Raw Normal View History

2020-07-30 23:40:16 +00:00
import Hookable from 'hookable'
2021-04-15 19:17:44 +00:00
import { loadNuxtConfig, LoadNuxtOptions, Nuxt, NuxtOptions, installModule, ModuleContainer } from '@nuxt/kit'
2021-01-22 20:57:09 +00:00
import { initNitro } from './nitro'
2020-07-02 13:02:35 +00:00
export function createNuxt (options: NuxtOptions): Nuxt {
const hooks = new Hookable() as any as Nuxt['hooks']
2021-04-15 19:17:44 +00:00
const nuxt: Nuxt = {
options,
hooks,
callHook: hooks.callHook,
2021-04-15 19:17:44 +00:00
hook: hooks.hook,
ready: () => initNuxt(nuxt),
close: () => Promise.resolve(hooks.callHook('close', nuxt))
}
2021-04-15 19:17:44 +00:00
return nuxt
2020-08-02 15:50:35 +00:00
}
async function initNuxt (nuxt: Nuxt) {
// Register user hooks
nuxt.hooks.addHooks(nuxt.options.hooks)
2020-07-02 13:02:35 +00:00
// Init nitro
await initNitro(nuxt)
2020-07-02 13:02:35 +00:00
// Init user modules
2021-04-15 19:17:44 +00:00
await nuxt.callHook('modules:before', { nuxt } as ModuleContainer)
const modulesToInstall = [
...nuxt.options.buildModules,
...nuxt.options.modules,
...nuxt.options._modules
]
2020-07-02 13:02:35 +00:00
for (const m of modulesToInstall) {
await installModule(nuxt, m)
2020-07-02 13:02:35 +00:00
}
2021-04-15 19:17:44 +00:00
await nuxt.callHook('modules:done', { nuxt } as ModuleContainer)
2020-07-02 13:02:35 +00:00
await nuxt.callHook('ready', nuxt)
}
2020-07-02 13:02:35 +00:00
2021-04-15 19:17:44 +00:00
export async function loadNuxt (opts: LoadNuxtOptions): Promise<Nuxt> {
const options = loadNuxtConfig(opts)
// Temp
const { appDir } = await import('@nuxt/app/meta')
options.appDir = appDir
options._majorVersion = 3
2021-04-04 14:22:40 +00:00
options.alias.vue = require.resolve('vue/dist/vue.esm-bundler.js')
options.buildModules.push(require.resolve('@nuxt/pages/module'))
options.buildModules.push(require.resolve('@nuxt/component-discovery/module'))
const nuxt = createNuxt(options)
2021-04-15 19:17:44 +00:00
if (opts.ready !== false) {
await nuxt.ready()
}
return nuxt
}