UNPKG

3.01 kBPlain TextView Raw
1#!/usr/bin/env node
2/* eslint-disable no-console */
3
4// Show logs
5process.env.DEBUG = process.env.DEBUG || 'nuxt:*'
6
7const fs = require('fs')
8const parseArgs = require('minimist')
9const debug = require('debug')('nuxt:generate')
10
11const { Nuxt, Builder, Generator } = require('../')
12const resolve = require('path').resolve
13
14const argv = parseArgs(process.argv.slice(2), {
15 alias: {
16 h: 'help',
17 c: 'config-file',
18 s: 'spa',
19 u: 'universal'
20 },
21 boolean: ['h', 's', 'u', 'build'],
22 string: ['c'],
23 default: {
24 c: 'nuxt.config.js',
25 build: true
26 }
27})
28
29if (argv.help) {
30 console.log(`
31 Description
32 Generate a static web application (server-rendered)
33 Usage
34 $ nuxt generate <dir>
35 Options
36 --spa Launch in SPA mode
37 --spa Launch in SPA mode
38 --universal Launch in Universal mode (default)
39 --config-file, -c Path to Nuxt.js config file (default: nuxt.config.js)
40 --help, -h Displays this message
41 --no-build Just run generate for faster builds when just dynamic routes changed. Nuxt build is needed before this command.
42 `)
43 process.exit(0)
44}
45
46const rootDir = resolve(argv._[0] || '.')
47const nuxtConfigFile = resolve(rootDir, argv['config-file'])
48
49var options = {}
50if (fs.existsSync(nuxtConfigFile)) {
51 options = require(nuxtConfigFile)
52} else if (argv['config-file'] !== 'nuxt.config.js') {
53 console.error(`> Could not load config file ${argv['config-file']}`)
54 process.exit(1)
55}
56if (typeof options.rootDir !== 'string') {
57 options.rootDir = rootDir
58}
59options.dev = false // Force production mode (no webpack middleware called)
60
61// Nuxt Mode
62options.mode = (argv['spa'] && 'spa') || (argv['universal'] && 'universal') || options.mode
63
64debug('Generating...')
65const nuxt = new Nuxt(options)
66const builder = new Builder(nuxt)
67const generator = new Generator(nuxt, builder)
68
69const generateOptions = {
70 init: true,
71 build: argv['build']
72}
73
74const s = Date.now()
75
76nuxt.hook('generate:distRemoved', function () {
77 debug('Destination folder cleaned')
78})
79
80nuxt.hook('generate:distCopied', function () {
81 debug('Static & build files copied')
82})
83
84nuxt.hook('generate:page', function (page) {
85 debug('Generate file: ' + page.path)
86})
87
88nuxt.hook('generate:done', function (generator, errors) {
89 const duration = Math.round((Date.now() - s) / 100) / 10
90
91 debug(`HTML Files generated in ${duration}s`)
92
93 if (errors.length) {
94 const report = errors.map(({ type, route, error }) => {
95 /* istanbul ignore if */
96 if (type === 'unhandled') {
97 return `Route: '${route}'\n${error.stack}`
98 } else {
99 return `Route: '${route}' thrown an error: \n` + JSON.stringify(error)
100 }
101 })
102 console.error('==== Error report ==== \n' + report.join('\n\n')) // eslint-disable-line no-console
103 }
104})
105
106generator.generate(generateOptions)
107 .then(() => {
108 debug('Generate done')
109 process.exit(0)
110 })
111 .catch((err) => {
112 console.error(err)
113 process.exit(1)
114 })