-
Notifications
You must be signed in to change notification settings - Fork 501
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
115 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import { resolve } from 'path' | ||
import consola from 'consola' | ||
import { rollup, OutputOptions } from 'rollup' | ||
import Hookable from 'hookable' | ||
import defu from 'defu' | ||
import prettyBytes from 'pretty-bytes' | ||
import gzipSize from 'gzip-size' | ||
import chalk from 'chalk' | ||
import { copy, emptyDir, existsSync } from 'fs-extra' | ||
import { getRollupConfig } from './rollup/config' | ||
import { tryImport, hl, prettyPath, renderTemplate, compileTemplateToJS } from './utils' | ||
|
||
export async function build (baseConfig, target) { | ||
consola.info(`Generating bundle for ${hl(target.target)}`) | ||
|
||
const _targetDefaults = tryImport(__dirname, `./targets/${target.target}`) || | ||
tryImport(baseConfig.rootDir, target.target) | ||
if (!_targetDefaults) { | ||
throw new Error('Cannot resolve target: ' + target.target) | ||
} | ||
|
||
const config: any = defu( | ||
// Target specific config by user | ||
target, | ||
// Global user config | ||
baseConfig, | ||
// Target defaults | ||
_targetDefaults, | ||
// Generic defaults | ||
{ outDir: resolve(baseConfig.buildDir, `dist/${target.target}`), outName: 'index.js' } | ||
) | ||
|
||
const hooks = new Hookable() | ||
hooks.addHooks(config.hooks) | ||
|
||
await hooks.callHook('config', config) | ||
|
||
emptyDir(config.outDir) | ||
|
||
config.rollupConfig = getRollupConfig(config) | ||
await hooks.callHook('rollup:before', config) | ||
const build = await rollup(config.rollupConfig) | ||
|
||
const { output } = await build.write(config.rollupConfig.output as OutputOptions) | ||
const size = prettyBytes(output[0].code.length) | ||
const zSize = prettyBytes(await gzipSize(output[0].code)) | ||
consola.success('Generated', prettyPath((config.rollupConfig.output as any).file), | ||
chalk.gray(`(Size: ${size} Gzip: ${zSize})`) | ||
) | ||
|
||
for (const tmpl of config.templates) { | ||
const dstPath = resolve(config.outDir, tmpl.dst) | ||
await renderTemplate(tmpl.src, dstPath, { config }) | ||
consola.info('Compiled', prettyPath(dstPath)) | ||
} | ||
|
||
if (config.copyAssets) { | ||
const publicDir = typeof config.copyAssets === 'string' ? config.copyAssets : 'public' | ||
const dst = resolve(config.outDir, publicDir, '_nuxt') | ||
await copy(resolve(config.buildDir, 'dist/client'), dst) | ||
consola.info('Copied public assets to', prettyPath(dst)) | ||
} | ||
|
||
await hooks.callHook('done', config) | ||
} | ||
|
||
export async function compileHTMLTemplate (baseConfig) { | ||
const htmlTemplateFile = resolve(baseConfig.buildDir, `views/${{ 2: 'app', 3: 'document' }[baseConfig.nuxt]}.template.html`) | ||
const htmlTemplateFileJS = htmlTemplateFile.replace(/.html$/, '.js').replace('app.', 'document.') | ||
await compileTemplateToJS(htmlTemplateFile, htmlTemplateFileJS) | ||
consola.info('Generated', prettyPath(htmlTemplateFileJS)) | ||
} | ||
|
||
export function ensureDist (baseConfig) { | ||
if (!existsSync(resolve(baseConfig.buildDir, 'dist/server'))) { | ||
return consola.error('Please use `nuxt build` first to build project!') | ||
} else { | ||
consola.success('Using existing nuxt build from', prettyPath(baseConfig.buildDir)) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
import { resolve } from 'path' | ||
import { tryImport } from './utils' | ||
|
||
export function getBaseConfig (rootDir) { | ||
const baseConfig = { | ||
rootDir, | ||
buildDir: '', | ||
targets: [], | ||
templates: [], | ||
nuxt: 2, | ||
target: process.argv[3] && process.argv[3][0] !== '-' ? process.argv[3] : null, | ||
minify: process.argv.includes('--minify') ? true : null, | ||
analyze: process.argv.includes('--analyze') ? true : null, | ||
logStartup: true | ||
} | ||
|
||
Object.assign(baseConfig, tryImport(rootDir, './nuxt.config')!.serverless) | ||
|
||
baseConfig.buildDir = resolve(baseConfig.rootDir, baseConfig.buildDir || '.nuxt') | ||
|
||
baseConfig.targets = baseConfig.targets.map(t => typeof t === 'string' ? { target: t } : t) | ||
if (baseConfig.target && !baseConfig.targets.find(t => t.target === baseConfig.target)) { | ||
baseConfig.targets.push({ target: baseConfig.target }) | ||
} | ||
|
||
return baseConfig | ||
} |