UNPKG

1.6 kBJavaScriptView Raw
1const { relative, resolve } = require('path')
2const { existsSync } = require('fs')
3const consola = require('consola')
4
5function routerModule(moduleOptions) {
6 const defaultOptions = {
7 path: this.options.srcDir,
8 fileName: 'router.js',
9 keepDefaultRouter: false
10 }
11
12 const options = {
13 ...{},
14 ...defaultOptions,
15 ...this.options.routerModule,
16 ...moduleOptions
17 }
18
19 const routerFilePath = resolve(options.path, options.fileName)
20
21 // Check if router file path is defined
22 if (!existsSync(routerFilePath)) {
23 return consola.warn(`No \`${options.fileName}\` file found in \`${options.path}\`.`)
24 }
25
26 // Add plugin to import router file path as the main template for routing
27 this.addPlugin({
28 src: resolve(__dirname, 'plugin.js'),
29 fileName: 'router.js',
30 options: {
31 routerFilePath: relative(this.options.buildDir, routerFilePath).replace(/\/+/g, '/'),
32 keepDefaultRouter: options.keepDefaultRouter
33 }
34 })
35
36 // Disable parsing `pages/`
37 if (!options.keepDefaultRouter) {
38 return this.nuxt.hook('build:before', () => {
39 this.nuxt.options.build.createRoutes = () => {
40 return []
41 }
42 })
43 }
44
45 // Put default router as .nuxt/defaultRouter.js
46 let defaultRouter
47
48 try {
49 defaultRouter = require.resolve('@nuxt/vue-app/template/router')
50 } catch (err) {
51 /* istanbul ignore next */
52 defaultRouter = require.resolve('nuxt/lib/app/router')
53 }
54
55 this.addTemplate({
56 fileName: 'defaultRouter.js',
57 src: defaultRouter
58 })
59}
60
61module.exports = routerModule
62module.exports.meta = require('../package.json')